Compruebe si la instancia es de un tipo

Usando esto para verificar si c es una instancia de TForm .

 c.GetType().Name.CompareTo("TForm") == 0 

¿Hay una forma más segura de hacerlo además de usar una string como CompareTo() para CompareTo() ?

Las diferentes respuestas aquí tienen dos significados diferentes.

Si desea verificar si una instancia es de un tipo exacto, entonces

 if (c.GetType() == typeof(TForm)) 

es el camino a seguir.

Si desea saber si c es una instancia de TForm o una subclase, entonces use is / as :

 if (c is TForm) 

o

 TForm form = c as TForm; if (form != null) 

Vale la pena tener claro cuál de estos comportamientos realmente deseas.

 if(c is TFrom) { // Do Stuff } 

o si planea usar c como TForm , use el siguiente ejemplo:

 var tForm = c as TForm; if(tForm != null) { // c is of type TForm } 

El segundo ejemplo solo necesita verificar si c es de tipo TForm una vez. Donde si comprueba si ve si c es de tipo TForm luego lo lanza, el CLR se somete a un control adicional. Aquí hay una referencia .

Editar: robado de Jon Skeet

Si quiere asegurarse de que c es de TForm y no de ninguna clase que hereda de TForm , use

 if(c.GetType() == typeof(TForm)) { // Do stuff cause c is of type TForm and nothing else } 

Sí, la palabra clave “es”:

 if (c is TForm) { ... } 

Vea los detalles en MSDN: http://msdn.microsoft.com/en-us/library/scekt9xw(VS.80).aspx

Comprueba si un objeto es compatible con un tipo determinado. Por ejemplo, se puede determinar si un objeto es compatible con el tipo de cadena como este:

Además, algo en el mismo vano

 Type.IsAssignableFrom(Type c) 

“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. ”

Desde aquí: http://msdn.microsoft.com/en-us/library/system.type.isassignablefrom.aspx

Un poco más compacto que las otras respuestas si quieres usar c como TForm:

 if(c is TForm form){ form.DoStuff(); } 

Pruebe lo siguiente

 if (c is TForm) { ... } 

Como otros han mencionado, la palabra clave “es”. Sin embargo, si luego vas a lanzarlo a ese tipo, ej.

 TForm t = (TForm)c; 

Entonces deberías usar la palabra clave “como”.

por ejemplo, TForm t = c as TForm.

Entonces puedes verificar

 if(t != null) { // put TForm specific stuff here } 

No combinar con es porque es un cheque duplicado.

O

 c.getType() == typeOf(TForm) 
 bool isValid = c.GetType() == typeof(TForm) ? true : false; 

o más simple

 bool isValid = c.GetType() == typeof(TForm);