Listint zu IEnumerableIComparable

8

Ich kann implizit einen Int in einen IComparable umwandeln. Ich kann auch eine Liste oder ein Array auf ein IEnumerable umwandeln.

Aber warum kann ich eine Liste nicht implizit auf einen IEnumerable umwandeln?

Ich habe das mit dem .net Framework 4.5 und Visual Studio 2012 Ultimate getestet.

Code zum Testen:

%Vor%     
user886079 22.02.2013, 16:51
quelle

2 Antworten

12

Generische Varianz gilt grundsätzlich nicht für Werttypen. Also während du kannst

Sie müssen jeden Wert in die Box eingeben:

%Vor%

Obwohl dies gültig ist, weil string ein Referenztyp ist:

%Vor%

... das Äquivalent funktioniert nicht für List<int> , und Sie müssen die Box wie Sie gehen.

    
Jon Skeet 22.02.2013, 16:55
quelle
2

Es ist eine allgemeine Verwirrung mit Listen von Generika, aber im Grunde, wenn Sie es verallgemeinern, macht es mehr Sinn:

Betrachten Sie diese Einstellung:

%Vor%

Die folgende Zeile würde nicht funktionieren:

%Vor%

Das liegt im Wesentlichen daran, dass, obwohl A : IA , List<I> does not : List<A> - völlig unterschiedliche Typen sind.

Sie können den Cast einfach mit der Methode Cast durchführen:

%Vor%

In Ihrem Fall könnten Sie also

machen %Vor%     
Jon Egerton 22.02.2013 16:57
quelle

Tags und Links