2016-07-29 78 views
0

有誰知道爲什麼我不能使用Linq擴展方法Cast<>()Int轉換爲UInt意外`指定的演員表無效.`````例外(Linq)

var myIntList = new List<int>(); 

myIntList.Add(1); 
myIntList.Add(2); 
myIntList.Add(3); 

var myUIntList = myIntList.Cast<uint>().ToList(); 

它拋出一個指定的轉換是無效。當我使用Select()時,它將工作(ofcourse)

var myIntList = new List<int>(); 

myIntList.Add(1); 
myIntList.Add(2); 
myIntList.Add(3); 

var myUIntList = myIntList.Select(i => (uint)i).ToList(); 

(它是一個錯誤或不實現功能?)

回答

4

Enumerable.Cast實現爲運行在IEnumerable的擴展方法(非通用接口)。

這意味着這個序列中的值是從object開始的,這意味着值類型會涉及裝箱和拆箱。您只能取消確切的類型。例如:

int i = 1; 
object boxed = i; 

int unboxToInt = (int)boxed; // ok 
uint unboxToUint = (uint)boxed; // invalid cast exception 

你可以閱讀更多關於拳擊in the documentation

+0

這一切都清楚。我會做一些閱讀。 –