可能重複:
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