tengo el siguiente código:Comportamiento de fundición extraño. No se puede convertir objeto (int) a largo
int intNumber1 = 100;
object intNumber2 = 100;
bool areNumberOfTheSameType = intNumber1.GetType() == intNumber2.GetType(); // TRUE
bool areEqual = intNumber1.Equals(intNumber2); // TRUE
long longNumber1 = (long) intNumber1; // OK
long longNumber2 = (long) intNumber2; // InvalidCastException. Why?
¿Por qué no el segundo trabajo de reparto? Me doy cuenta de que puede deberse a que el objeto no tiene un molde explícito a largo, pero si miramos su tipo en tiempo de ejecución es System.Int32
.
Si uso var
o dynamic
en lugar de object
, funciona.
¿Alguna idea?
intente cambiar eso a 'long longNumber2 = (long) (int) intNumber2;' –
¿Por qué le gustaría usar un objeto en lugar de var en esta instancia? Es mejor mantener las variables fuertemente tipadas donde sea posible –
@ Quinn351: supongo que el código anterior ilustra un problema simplificado que el usuario tiene, no creo que debamos tomarlo como una práctica actual. – Abel