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%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:
... das Äquivalent funktioniert nicht für List<int>
, und Sie müssen die Box wie Sie gehen.
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:
In Ihrem Fall könnten Sie also
machen %Vor%Tags und Links c# list ienumerable icomparable