Sin embargo, hay un pequeño problema con esta idea, ya que cada objeto (y, de hecho, cada tipo) tiene una clase base común, Object. Lo que necesita definir es qué tan lejos en la cadena de herencia desea ir (si son los mismos o si tienen el mismo padre inmediato, o uno es el padre inmediato del otro, etc.) y hacen su comprueba de esa manera. IsAssignableFrom
es útil para determinar si los tipos son compatibles entre sí, pero no establecerá completamente si tienen el mismo elemento principal (si eso es lo que busca).
Si sus criterios estrictos es que la función debe devolver verdadero si ...
- Los tipos son idénticos
- Un tipo es el padre (inmediata o de otra manera) de la otra
- Los dos tipos tienen el mismo padre inmediato
Usted podría utilizar
private bool AreSame(Type a, Type b)
{
if(a == b) return true; // Either both are null or they are the same type
if(a == null || b == null) return false;
if(a.IsSubclassOf(b) || b.IsSubclassOf(a)) return true; // One inherits from the other
return a.BaseType == b.BaseType; // They have the same immediate parent
}
+1 No conocía esa práctica función IsAssignableFrom, tendré que tener eso en cuenta. – James
¡Hay muchas cosas útiles en la jerarquía Reflexión! Es interesante simplemente navegar por la lista de miembros; es muy probable que encuentres lo que necesitas. Sin embargo, lea los documentos. Por ejemplo, IsAssignableFrom devolvería true si t fuera un tipo genérico param y u fuera una restricción. –
Solo para su información, esto no será verdadero si las dos clases tienen la misma clase base. –