2012-05-11 14 views
29

Quiero comprobar si un objeto no es de un tipo particular. Yo sé cómo comprobar si algo es de un tipo particular:¿Cómo verificar si un objeto no es de un tipo particular?

if (t is TypeA) 
{ 
    ... 
} 

pero

if (t isnt TypeA) 
{ 
    ... 
} 

no funciona.

+22

+1: Me hizo reír :-) –

+3

Bien jugado Sachin ... Día lento en el trabajo? : D – svinja

+0

No, no, hay mucho que hacer. Quería hacer un control "no de tipo" y me di cuenta de que no podía hacerlo. –

Respuesta

40

C# no es el idioma muy natural;) Uso éste

if(!(t is TypeA)) 
{ 
    ... 
} 
+7

No hay necesidad de intentarlo, funcionará :) – Jon

+3

@Jon cambió 'Probar' -> 'Usar' –

9

si desea no sólo cheque, puede utilizar as operador.

var a = t as TypeA; 
if(a!= null) 
    //use a.. 

De esta manera, si desea utilizar un tipo después de la salida, se evita el doble de fundición ..

+0

I no creas que esto funciona si a es nulo antes del lanzamiento. – Bochu

+0

@Bochu: aún funcionará, pero independientemente de eso, está fuera de cuestión de mi respuesta. 'a' se inicializa como puede ver. – Tigran

4

Si usted está haciendo un TypeA x = (TypeA)t; dentro del bloque if entonces una mejor manera es

TypeA x = t as TypeA 
if(x != null) 
{ 
... 
} 

Esto provoca solo una verificación de tipo de tiempo en lugar de dos veces.

2

normalmente se pegan al nulo y comprobación de tipo todo en una línea:

if (t == null || !(t is TypeA)) { 
    ... 
} 

Si TypeA es una estructura, que necesita para manejarlo de forma ligeramente diferente de nuevo:

if (t == null || t.GetType() != typeof(TypeA)) { 
    ... 
} 
0

Comprobar a continuación ejemplo para getType():

object obj = new object(); 
obj.GetType(); 

string s; 
s.GetType(); 

List<string> StringList = new List<string>(); 
StringList.GetType(); 
+2

Las respuestas de enlace único no son tan eficientes aquí. Edite su respuesta con el código correspondiente para que sea más fácil para todos leer lo que es importante para el tema. – dachi

2

Extensiones de métodos para el rescate!

public static class ObjectExtensions 
{ 
    public static bool Isnt(this object source, Type targetType) 
    { 
     return source.GetType() != targetType; 
    } 
} 

Uso

if (t.Isnt(typeof(TypeA))) 
{ 
    ... 
} 
+0

Lo hice, pero también creé una extensión de "IS" así como el código se ve similar, por ejemplo. t.IsA (xxx), t.IsNotA (xxx). sí, sé que no es necesario, pero me parece mejor. – harag

Cuestiones relacionadas