Ich kann implizit einen Int zu einem IComparable Cast. Ich kann auch eine Liste oder ein Array auf IEnumerable umwandeln.Liste <int> zu IEnumerable <IComparable>
Aber warum kann ich eine Liste nicht implizit auf einen IEnumerable umwandeln?
Ich habe dies mit dem .net Framework 4.5 und Visual Studio 2012 Ultimate getestet.
-Code zu testen:
IComparable test1;
int t1 = 5;
test1 = t1; //OK
IEnumerable<int> test2;
List<int> t2 = new List<int>();
int[] t3 = new int[] { 5, 6 };
test2 = t2; //OK
test2 = t3; //OK
TabAlignment[] test;
IEnumerable<IComparable> test3;
test3 = t2; //error Cannot implicitly convert type 'System.Collections.Generic.List<int>' to 'System.Collections.Generic.IEnumerable<System.IComparable>'. An explicit conversion exists (are you missing a cast?)
tun zu haben mit meinem durch Ihre Antwort und im Vergleich zu lesen (und dann getestet im Code), merke ich, dass mein Fehler in diesem Fall falsch ist, da es sich um Konvertierungen von Liste -> Liste statt Liste -> IEnumerable handelt, aber ich bin verwirrt, warum das einen Unterschied macht. Können Sie erklären? –
@ JonEgerton: Ich vermute, dass Sie generische Typ Argumente in diesem Kommentar, aber ich kann sie nicht sehen. Versuchen Sie es noch einmal, indem Sie die Code-bezogenen Bits mit Backticks abgleichen. –
@JonEgerton: Okay, lesen Sie Ihre Antwort, dann Ihren Kommentar noch einmal ... - es ist, weil 'List' ist nicht kovariant in 'T', aber' IEnuemrable 'ist (wie von .NET 4). Klassen können niemals Varianten sein. Suche nach "Generic Varianz" auf MSDN für weitere Details :) –