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:
解决方法
啊哈,我只需走开半个小时再看一遍.在使用计算机20年后,您认为我已经了解到问题通常是一个透视问题.
Lead确实从sObject继承,但是抽象类在库中,在实现类的不同命名空间和项目中,并且每个都使用Salesforce WSDL.我要求编译器将SalesforceExtractor.Salesforce.Lead强制转换为SalesforceUtilities.Salesforce.sObject,这是无效的.我只需要在我的实现类中更明确: class LeadReader: SalesforceReader<SalesforceUtilities.Salesforce.Lead,object[]> 编译,我想我应该好好去. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Swift 接入微信 Mars_Xlogger 填坑指南——Jinkey 原创
- ruby-on-rails – 如何在config / initializers运行后设置A
- Ajax--Get请求
- boost location-independent times
- Redis进阶实践之十 Redis主从复制的集群模式
- cocos2dx 3.x判断node点击区域是否透明
- ruby-on-rails – 在Rails表单中使用textarea帮助器
- Solr 配置文件之core.properties、solr.xml和Config Sets
- 使用React-Native将content:// URI转换为Android的实际路径
- c# – Log4Net何时配置?