Perché Enumerable.Cast genera un’eccezione InvalidCastException?

Se riesco a trasmettere implicitamente un valore intero a un doppio, ad esempio:

int a = 4; double b = a; // now b holds 4.0 

Perché non posso farlo:

 int[] intNumbers = {10, 6, 1, 9}; double[] doubleNumbers2 = intNumbers.Cast().ToArray(); 

Ricevo un’eccezione InvalidCastException “Cast specificato non valido”.

Facendo il contrario (casting da double a int) si ottiene lo stesso errore.

Che cosa sto facendo di sbagliato?