私はIComparableにintを暗黙的にキャストできます。リストや配列をIEnumerableにキャストすることもできます。リスト<int>からIEnumerable <IComparable>
しかし、リストを暗黙的にIEnumerableにキャストできないのはなぜですか?
私はこれを.NET Framework 4.5とVisual Studio 2012 Ultimateでテストしました。テストへ
コード:
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?)
は、あなたの答えを読ん及び鉱山(その後、テストと比較したんでした私は、List - > IEnumerableではなくList - > Listからの変換を扱うので、このインスタンスでは私のことが間違っていることを理解していますが、なぜ違いがあるのでしょうか?説明できますか? –
@JonEgerton:あなたはそのコメントにジェネリック型の引数を入れたと思われますが、私はそれらを見ることができません。コードに関連するビットの周りにバッククォートを付けて、もう一度試してみてください。 –
@JonEgerton:答え、あなたのコメントをもう一度読んでください... 'List'は 'T'では共変ではありませんが、' IEnuemrable 'は(.NET 4以降)です。クラスは変わることはありません。詳細についてはMSDNの "generic variance"を検索してください:) –