web-dev-qa-db-fra.com

Comment vérifier si un objet n'est pas d'un type particulier?

Je veux vérifier si un objet n'est pas d'un type particulier. Je sais comment vérifier si quelque chose est d'un type particulier:

if (t is TypeA)
{
   ...
}

mais 

if (t isnt TypeA)
{
   ...
}   

ne fonctionne pas. 

33
Sachin Kainth

C # n'est pas un langage tout à fait naturel;) Utilisez celui-ci

if(!(t is TypeA))
{
   ...
}
52
ie.

si vous ne voulez pas que cocher, vous pouvez utiliser comme opérateur.

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

De cette manière, si vous souhaitez utiliser un type après contrôle, vous évitez le double casting.

9
Tigran

Si vous faites un TypeA x = (TypeA)t; dans le bloc if, une meilleure solution

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

Cela provoque seulement une vérification de type de temps plutôt que deux fois.

4
softveda

Les méthodes d'extensions à la rescousse !!

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

Usage

if (t.Isnt(typeof(TypeA)))
{
   ...
}
3
Paleta

J'ai l'habitude de coller le null et de dactylographier tout en une ligne

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

Si TypeA est une structure, vous devrez la manipuler légèrement différemment:

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

Consultez ci-dessous l'exemple pour getType():

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

string s;
s.GetType();

List<string> StringList = new List<string>();
StringList.GetType();
0
user2490832

Réponse courte: vous voudrez peut-être utiliser:

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

Longue réponse:

Alors. Sachez que vous demandez s'il s'agit d'un type particulier. is ne vous dit pas s'il s'agit d'un type particulier - il vous indique s'il s'agit d'un type particulier ou un descendant de de ce type.

Donc, si vous avez deux classes, Animal et Cat: Animal, et que Félix est un chat, 

if (felix is Animal)
{
    //returns true
}
if (felix.GetType() == typeof(Animal))
{
    //does not
}

Si ce n'est pas important pour vous, les classes héritées sont acceptables, alors ne vous en faites pas, utilisez !(felix is Animal) comme d'autres l'ont mentionné, et tout va bien! (Vous allez probablement bien.)

Mais si vous devez vous assurer que felix est spécifiquement un animal, vous devez demander si t.GetType()==typeof(TypeA).

0
Peter Kay