2009-04-16 33 views
13

Estoy intentando escribir una validación para verificar que una instancia de Objeto pueda convertirse en una variable Tipo. Tengo una instancia de tipo para el tipo de objeto que necesitan proporcionar. Pero el tipo puede variar. Esto es básicamente lo que quiero hacer.Cómo saber si una instancia pertenece a un determinado Tipo o cualquier tipo derivado

 Object obj = new object(); 
     Type typ = typeof(string); //just a sample, really typ is a variable 

     if(obj is typ) //this is wrong "is" does not work like this 
     { 
      //do something 
     } 

El objeto tipo tiene los métodos IsSubClassOf e IsInstanceOfType. Pero lo que realmente quiero comprobar es si obj es una instancia de tipo o cualquier clase derivada de tipo.

Parece una pregunta simple, pero parece que no puedo entenderlo.

Respuesta

24

¿Qué tal esto:

 

    MyObject myObject = new MyObject(); 
    Type type = myObject.GetType(); 

    if(typeof(YourBaseObject).IsAssignableFrom(type)) 
    { 
     //Do your casting. 
     YourBaseObject baseobject = (YourBaseObject)myObject; 
    } 

 

Esto le indica si ese objeto se puede lanzar a ese tipo determinado.

+1

Sí, lo encontré anoche. Gracias sin embargo. –

7

Creo que necesita volver a especificar sus condiciones, porque si obj es una instancia de Derived, también será una instancia de Base. Y typ.IsIstanceOfType(obj) devolverá verdadero.

class Base { } 
class Derived : Base { } 

object obj = new Derived(); 
Type typ = typeof(Base); 

type.IsInstanceOfType(obj); // = true 
type.IsAssignableFrom(obj.GetType()); // = true 
7

Si está trabajando con instancias, usted debe ir para Type.IsInstanceOfType

(devoluciones) verdadero si el tipo de corriente es en la jerarquía de herencia del objeto representado por o, o si el tipo actual es una interfaz que admite . false si ninguna de estas condiciones es el caso, o si o es nullNothingnullptrreferencia nula (Nothing en Visual Basic), o si el Type actual es un tipo abierto genérica (es decir, ContainsGenericParameters devuelve verdadero). - MSDN

 Base b = new Base(); 
     Derived d = new Derived(); 
     if (typeof(Base).IsInstanceOfType(b)) 
      Console.WriteLine("b can come in."); // will be printed 
     if (typeof(Base).IsInstanceOfType(d)) 
      Console.WriteLine("d can come in."); // will be printed 

Si está trabajando con objetos de tipo, entonces usted debe buscar en Type.IsAssignableFrom

(Vuelve) cierto si c y el tipo de corriente 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 uno de t él restricciones de c. falso si ninguno de estas condiciones son verdaderas, o si c es nullNothingnullptra null reference (Nothing en Visual Basic). - MSDN

Cuestiones relacionadas