我正在编写一个通用类来读取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?
解决方法
Lead确实从sObject继承,但是抽象类在库中,在实现类的不同命名空间和项目中,并且每个都使用Salesforce WSDL.我要求编译器将SalesforceExtractor.Salesforce.Lead强制转换为SalesforceUtilities.Salesforce.sobject,这是无效的.我只需要在我的实现类中更明确:
class LeadReader: SalesforceReader<SalesforceUtilities.Salesforce.Lead,object[]>
编译,我想我应该好好去.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。