Ответ 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)
вместо этого, чтобы получить поведение преобразования значений.