gpt4 book ai didi

C#/Salesforce : Must Constrain Generic, 无法约束通用

转载 作者:行者123 更新时间:2023-11-30 12:52:17 25 4
gpt4 key购买 nike

这个问题由 C# 和 Salesforce 组成,双方可能都有解决方案。欢迎提出建议!

我正在编写一个通用类来读取 Salesforce 数据。签名看起来像这样:

public abstract class SalesforceReader<SalesforceObjectType, RecordType>
where SalesforceObjectType: sObject

这让我稍后可以使用此代码:

List<RecordType>  records = new List<RecordType>();
QueryResult queryResult = service.query(query);
foreach (sObject rawRecord in queryResult.records)
records.Add(ConvertRecord((SalesforceObjectType)rawRecord));

...

public abstract RecordType ConvertRecord(SalesforceObjectType record);

计划是编写知道如何解析的此类的实现,例如,Salesforce Lead对象变成 RecordType ,这可能是一个基本的 object[] , 一个 Dictionary<string, value> ,或我稍后选择的完全定义的结构。

到目前为止,我对我出色而优雅的解决方案感到非常满意。我的程小奔奖和获奖一样好。然后我尝试编写一个实现。这个定义不好:

class LeadReader: SalesforceReader<Lead, object[]>

编译结果为:

The type 'SalesforceExtractor.Salesforce.Lead' cannot be used as type
parameter 'SalesforceObjectType' in the generic type or method
'SalesforceUtilities.SalesforceReader<SalesforceObjectType,RecordType>'.
There is no implicit reference conversion from
'SalesforceExtractor.Salesforce.Lead' to
'SalesforceUtilities.Salesforce.sObject'.

无赖。我必须有 where SalesforceObjectType: sObject抽象类中的约束,因此我可以转换 sObjects,但由于转换不是隐式的,因此对于实现类来说还不够好。

我是否需要与我简洁的小解决方案吻别,或者有办法挽救它吗?这是我的第一个 Salesforce 项目,所以如果我需要以不同的方式处理事情,请告诉我。

对于糟糕的电影/MST3K 爱好者:

Where do "must" and "cannot" meet on the graph?

最佳答案

啊哈,我只需要走开半个小时再看一遍。使用计算机 20 年后,您可能会认为我已经了解到问题通常是视角问题。

Lead 确实继承自 sObject,但抽象类位于库中,位于与实现类不同的命名空间和项目中,并且它们每个都使用 Salesforce WSDL。我要求编译器将 SalesforceExtractor.Salesforce.Lead 转换为 SalesforceUtilities.Salesforce.sObject,这是无效的。我只需要在我的实现类中更加明确:

class LeadReader: SalesforceReader<SalesforceUtilities.Salesforce.Lead, object[]>

编译成功,我想我应该可以开始了。

关于C#/Salesforce : Must Constrain Generic, 无法约束通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4890472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com