Ответ 1
В методах Cast<T>
и OfType<T>
выполняются только ссылки и преобразования для распаковки. Поэтому они не могут преобразовать один тип значения в другой тип значения.
Методы работают с неродным интерфейсом IEnumerable
, поэтому они по существу преобразуются из IEnumerable<object>
в IEnumerable<T>
. Таким образом, причина, по которой вы не можете использовать Cast<T>
для преобразования из IEnumerable<int>
в IEnumerable<char>
, - та же самая причина, по которой вы не можете вставить коробку int
в char
.
По существу, Cast<char>
в вашем примере терпит неудачу, поскольку выполняется следующее:
object ascii = 65;
char ch = (char)ascii; <- InvalidCastException
Подробнее см. Jon Skeet EduLinq для более подробной информации.