铸造和LINQ演员()
问题描述:
当试图回答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
感谢马丁点 。那很有意思。因此,无论如何,对于内在的拳击表现的惩罚,大概应该避免投注。我很惊讶,MSDN在任何地方都没有提到(无论如何我都能找到)。 –
fearofawhackplanet
2010-07-29 11:46:30
'Cast'仅用于使IEnumerable达到'IEnumerable '的水平,其中定义了所有其他LINQ运算符。把一个'IEnumerable '并将其转换为'IEnumerable '是一个投影,它由'Select'完成。 “IEnumerable ”上的'Cast'甚至可能仅仅是因为'IEnumerable '从IEnumerable继承 - 没有其他原因。 –
2010-07-29 13:17:08