铸造和LINQ演员()

铸造和LINQ演员<T>()

问题描述:

当试图回答this question,我发现了以下内容:铸造和LINQ演员<T>()

string s = "test"; 

var result1 = s.Select(c => (ushort)c); // works fine 

var result2 = s.Cast<ushort>(); // throws an invalid cast exception 

为什么Cast<T>()失败吗?有什么不同?

想你会在这里找到答案:

Puzzling Enumerable.Cast InvalidCastException

的最后一部分,在编辑:

Cast<T>()IEnumerable而不是 IEnumerable<T>的扩展方法。这意味着,由 每个时间值上哪里它正在投,它已经被 盒装回一个System.Object

+1

感谢马丁点 。那很有意思。因此,无论如何,对于内在的拳击表现的惩罚,大概应该避免投注。我很惊讶,MSDN在任何地方都没有提到(无论如何我都能找到)。 – fearofawhackplanet 2010-07-29 11:46:30

+5

'Cast '仅用于使IEnumerable达到'IEnumerable '的水平,其中定义了所有其他LINQ运算符。把一个'IEnumerable '并将其转换为'IEnumerable '是一个投影,它由'Select'完成。 “IEnumerable ”上的'Cast'甚至可能仅仅是因为'IEnumerable '从IEnumerable继承 - 没有其他原因。 – 2010-07-29 13:17:08