C # generische Einschränkungen für IEnumerable

8
%Vor%

Der Compiler benötigt explizit IEnumerable<A> als IEnumerable<I> :

%Vor%

Aber mit generischen Einschränkungen erhalten wir:

%Vor%

Jedoch kompiliert das gut.

%Vor%

Daher die Frage: Ist das ein korrektes Verhalten, oder ist es ein Bug?

    
destator 24.07.2012, 12:16
quelle

2 Antworten

14

Das Problem ist, dass die generische Kovarianz nur für Referenztypen gilt. Zum Beispiel ist ein List<int> nicht * ein IEnumerable<Comparable> , sondern ein List<string> ist.

Wenn Sie also T als Referenztyp festlegen, wird Folgendes kompiliert:

%Vor%     
Jon Skeet 24.07.2012, 12:22
quelle
1

Das hat mit Kovarianz und Kontravarianz zu tun. Es genügt zu sagen, dass es kein Fehler ist, sondern ein Feature.

Für einen tieferen Einblick hier empfehle ich Eric Lipperts Blog-Post-Serie hier:

Ссылка

    
samjudson 24.07.2012 12:26
quelle

Tags und Links