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