Esto es falso: typeof(double).IsAssignableFrom(typeof(int))
¿Por qué IsAssignableFrom() no funciona para int y double?
Esto es falso: typeof(int).IsAssignableFrom(typeof(double))
Pero esto funciona:
double a = 1.0;
int b = 1;
a = b;
Es evidente que un double
es asignable a partir de una int
pero el marco IsAssignableFrom()
se equivoca.
¿Por qué? ¿O es esto un error en .NET causado por la naturaleza especial de int y el doble que no tienen relación de herencia, pero que son asignables (en una dirección)?
Supongo que no tiene en cuenta la conversión implícita. –
Desde la página [IsAssignableFrom MSDN] (http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx): Devuelve "verdadero si c y el Tipo actual representan el mismo tipo, o si el Tipo actual está en la jerarquía de herencia de c, o si el Tipo actual es una interfaz que c implementa, o si c es un parámetro de tipo genérico y el Tipo actual representa una de las restricciones de C. falso si ninguno de estos las condiciones son verdaderas, o si c es una referencia nula ". – bentayloruk
Gracias a todos; Agregué una nota de comunidad a MSDN, haciendo que este corolario oculto sea algo más claro, para que nadie más suponga tontamente que el nombre del método significa lo que dice. Supongo que 'Type.IsSomewhatAssignableFrom' hubiera sido demasiado largo :) –