2009-07-23 12 views
0

Ich versuche, die folgendes zu tun:Mischung von Typen in generische Liste

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

und nennen dies durch

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

List.Add(CustomerRepository); 

wo ICustomer und ICustomerCriteria von IBusinessObject und ICriteria bzw. absteigen.

Dies wird jedoch vom Compiler nicht gemocht.

Hmmm, ich weiß, ich dränge es ein bisschen, aber ich dachte, das würde funktionieren? Wer weiß warum?

Dank Duncan

Antwort

1

Dies ist ein generic variance Problem:

dies das Problem veranschaulichen:

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!! 

In .NET FX 4 wird C# eine besondere Art von in und out generischen Parametern unterstützen zu ermöglichen richtiges Verhalten.

+0

Okay, aber mein Objekt Graph ist Sound - ICustomer stammt von IBusinessObject, so sehe ich immer noch nicht das Problem! Hmmm ... irgendwelche empfohlenen Workarounds dann? – Duncan

+0

Aber Sie könnten eine 'ICompletelyDifferentCriteria' in Ihre Liste von' ICustomerCriteria' aufnehmen, da beide 'ICriteria' geerbt haben. – Dario