可能重复:
Puzzling Enumerable.Cast InvalidCastExceptionEnumerable.Cast <T>扩展方法无法从int转换为long,为什么?
嗨,
我只是发现了一些与Enumerable.Cast<T>
扩展方法很奇怪......它似乎不能施放从int
到long
,尽管这个演员是完全合法的。
下面的代码失败,并InvalidCastException
:
foreach (var item in Enumerable.Range(0,10).Cast<long>())
{
Console.WriteLine(item);
}
但是这个代码,我认为是等同的,不工作:
foreach (var item in Enumerable.Range(0,10).Select(i => (long)i))
{
Console.WriteLine(item);
}
任何人都可以解释这种行为?我看着与反射铸造法的代码,但反射不能interprete迭代块,所以这是很费解......
可能重复:http://stackoverflow.com/questions/445471 – 2009-11-06 00:06:22
是的,你”对吧......我错过了我的搜索 – 2009-11-06 01:16:28
我很惊讶,没有一个答案实际上回答了这个问题*为什么*。答案是因为从int到long **的转换不是cast **。这是一个*转换*。不幸的是,C#对这两种语言使用相同的语法,因为它只会混淆人们(显然)。您也不能使用'.Cast()'调用自定义的显式转换运算符,因为这也不是转换。 –
Timwi
2010-08-27 08:07:53