この質問は、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
オブジェクトをに変換します。これは、基本的な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マニアのために
?
あなたはかなり正しいです、私はコンパイラがこれを理解できるように私の名前空間を調整する必要がありました。共分散とコントラバナンスに関しては、あなたがリンクしている記事を読んでいます。 –