2009-07-23 20 views
0

私は次のことをやろうとしている:ジェネリックリスト内の型の混合物

List<IRepository<IBusinessObject, ICriteria>> Repositories { get; } 

とICustomerとICustomerCriteriaはそれぞれIBusinessObjectとICriteriaから降りる

IRepository<ICustomer, ICustomerCriteria> cr = new CustomerRepository(); 

List.Add(CustomerRepository); 

することによって、これを呼び出します。

しかし、これはコンパイラでは好きではありません。

ええと、私はそれを少し押していますが、これはうまくいくと思いましたか?誰でも知っている理由は?

おかげ ダンカン

答えて

1

考えてみましょう

List<string> Strings = ...; 
List<object> Objects = Strings; // Should work 

Objects.Add(42); // 42 is an object - Should work 
// But we would add an integer into a list of strings!! 

の.NET FX 4での、C#ができるようにinout汎用パラメータの特別な種類をサポートしています正しい挙動。

+0

私のオブジェクトグラフはサウンドです - ICustomerはIBusinessObjectから降りていますので、まだ問題は見えません!うーん...推奨される回避策はどれですか? – Duncan

+0

しかし、両方のICriteriaが継承されているので、 'ICustomerCriteria'のリストに' ICompletelyDifferentCriteria'を追加することができます。 – Dario

関連する問題