If I can implicitly cast an integer value to a double, like:
int a = 4;
double b = a;
// now b holds 4.0
Why can I not do this:
int[] intNumbers = {10, 6, 1, 9};
double[] doubleNumbers2 = intNumbers.Cast<double>().ToArray();
I get a "Specified cast is not valid" InvalidCastException
exception.
Doing the opposite (casting from double to int) results in the same error.
What am I doing wrong?
Well, you have incorrect expectations of Cast
, that's all - it's meant to deal with boxing/unboxing, reference and identity conversions, and that's all. It's unfortunate that the documentation isn't as clear as it might be :(
The solution is to use Select
:
doubleNumbers2 = intNumbers.Select(x => (double) x).ToArray();