我可以隱式地將一個int轉換爲IComparable。我也可以將List或數組轉換爲IEnumerable。List <int> to 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 - > List而不是List - > IEnumerable的轉換,但我很困惑爲什麼這會有所作爲。你可以解釋嗎? – 2013-02-22 17:11:42
@JonEgerton:我懷疑你在該評論中放置了泛型類型參數,但是我看不到它們。再試一次,用反斜槓代碼相關的位。 – 2013-02-22 17:21:20
@JonEgerton:好的,閱讀你的答案,然後再次評論...... - 這是因爲'List'不是'T'中的協變,而是'IEnuemrable '(從.NET 4開始)。類永遠不會是變體。在MSDN上搜索「通用方差」以獲取更多詳細信息:) –
2013-02-22 17:24:19