недопустимое исключение листа в int для двойного

Может быть, я сумасшедший, но я думал, что это действительный акт:

(new int[]{1,2,3,4,5}).Cast<double>()

Почему LinqPad бросает

InvalidCastException: указанный листинг недействителен.

?

Ответ 1

С# позволяет преобразовать из int напрямую в double, но не из int в object чтобы double.

int i = 1;
object o = i;
double d1 = (double)i; // okay
double d2 = (double)o; // error

Метод расширения Enumerable.Cast ведет себя как последний. Он не преобразует значения в другой тип, он утверждает, что значения уже имеют ожидаемый тип и генерирует исключение, если они не являются.

Вы можете попробовать (new int[]{1,2,3,4,5}).Select(i => (double)i) вместо этого, чтобы получить поведение преобразования значений.