微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#/ Salesforce:必须约束通用,不能约束通用

这个问题与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,recordtype可以是基本对象[],Dictionary< string,value>或完全定义的struct我后来选择.

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

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'.

游民.我必须在抽象类中使用SalesforceObjectType:sObject约束,因此我可以强制转换sObjects,但由于转换不是隐式的,因此对于实现类来说还不够好.

我需要亲吻我整洁的小解决方案再见,还是有办法挽救这个?这是我的第一个Salesforce项目,所以如果我需要采取不同的方式,请告诉我.

对于糟糕的电影/ MST3K buff:

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[]>

编译,我想我应该好好去.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐