Возможный дубликат:
Puzzling Enumerable.Cast InvalidCastException
Привет,
Я заметил что-то довольно странное в методе расширения 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);
}
Может ли кто-нибудь объяснить это поведение? Я посмотрел на код метода Cast с Reflector, но Reflector не может интерпретировать блоки итераторов, поэтому его довольно сложно понять...