Кастинг и Linq Cast <T>() - PullRequest
6 голосов
/ 29 июля 2010

Пытаясь ответить на этот вопрос , я обнаружил следующее:

string s = "test";

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

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

Почему Cast<T>() терпит неудачу здесь? Какая разница?

1 Ответ

12 голосов
/ 29 июля 2010

Думаю, вы найдете ответ здесь:

Недоумение Enumerable.Cast InvalidCastException

Последняя часть, под Edit:

Cast<T>() - это метод расширения на IEnumerable, а не IEnumerable<T>. Это означает, что время каждого значения достигает точки где его кастуют, он уже был упакован обратно в System.Object

...