126 votes

Différence entre le mot-clé is et as

Veuillez dire quelle est la différence entre is et as mot-clé en C#

7 votes

Est-ce que c'est comme ça ou est-ce que c'est comme ça ? blogs.msdn.com/b/ericlippert/archive/2010/09/16/

3 votes

Si ce sujet vous intéresse, vous voulez probablement aussi savoir quelle est la différence entre les opérateurs "as" et "cast" : blogs.msdn.com/b/ericlippert/archive/2009/10/08/

0 votes

@EricLippert Ce lien est maintenant rompu.

159voto

Guffa Points 308133

es

Le site is opérateur vérifie si un objet peut être converti en un type spécifique.

Exemple :

if (someObject is StringBuilder) ...

comme

Le site as opérateur tente de convertir un objet en un type spécifique, et renvoie null si cela échoue.

Exemple :

StringBuilder b = someObject as StringBuilder;
if (b != null) ...

Voir aussi :

Casting

Le site opérateur de distribution tente de convertir un objet en un type spécifique, et lève une exception si elle échoue.

Exemple :

StringBuilder b = (StringBuilder)someObject.

36voto

Prem Ranjan Jha Points 11

La différence entre IS et Comme c'est que

IS - L'opérateur Is est utilisé pour vérifier la compatibilité d'un objet avec un type donné et renvoie le résultat sous forme de booléen (vrai ou faux).

AS - L'opérateur As est utilisé pour le transfert d'un objet vers un type ou une classe donnée.

Ex.

Student s = obj as Student;

est équivalent à :

Student s = obj is Student ? (Student)obj : (Student)null;

1 votes

L'équivalence montre clairement lequel des deux est le plus primitif et sous-tend élégamment leur relation ! Merci pour l'équivalence !

2 votes

@MusaAl-hassy En fait, cela ne montre pas qui est le plus primitif. is peut être exprimé par as et as peut être exprimé par is . Voici comment faire un is avec le as mot-clé. Bool b = obj is Student; est équivalent à : Bool b = (obj as Student) != null; Plus d'informations à ce sujet ici

10voto

Abhilash NK Points 431

Les deux sites is et as sont utilisés pour le moulage de type en C#.

Si vous examinez le code IL des utilisations des deux mots-clés, vous comprendrez facilement la différence.

Code C# :

BaseClass baseclassInstance = new DerivedClass();
DerivedClass derivedclassInstance;

if (baseclassInstance is DerivedClass)
{
   derivedclassInstance = (DerivedClass)baseclassInstance;
   // do something on derivedclassInstance
}

derivedclassInstance = baseclassInstance as DerivedClass;

if (derivedclassInstance != null)
{
   // do something on derivedclassInstance
}

Code IL (le code C# ci-dessus est dans l'image jointe) :

IL code for above C# code Le code IL pour is L'utilisation du mot-clé contient des instructions IL à la fois isinsta et castclass .
Mais le code IL pour as L'utilisation des mots-clés a seulement isinsta .

Dans l'utilisation mentionnée ci-dessus, deux cas de figure se produiront où is est utilisé et qu'un seul typecast où as est utilisé.

Remarque : Si vous utilisez is pour vérifier une certaine condition et n'ont pas d'intérêt pour le résultat du tapuscrit, alors il n'y aura qu'un seul tapuscrit, à savoir

if (baseclassInstance is DerivedClass)
{
   // do something based on the condition check.
}

is et as Les mots-clés seront utilisés en fonction de la nécessité.

6voto

ShdNx Points 1840

Le mot-clé is vérifie si la valeur sur son côté gauche est une instance du type sur le côté droit. Par exemple :

if(obj is string)
{
     ...
}

Notez que dans ce cas, vous devrez utiliser un cast explicite supplémentaire pour obtenir obj en tant que chaîne.

Le mot-clé as est utilisé pour exprimer les types nullables. Si la valeur spécifiée n'est pas une instance du type spécifié, null est retourné. Par exemple :

string str = obj as string;
if(str != null)
{
     ...
}

0 votes

+1 pour "Le mot clé as est utilisé pour couler les types nullables".

4voto

Faizan Butt Points 57

est OPERATEUR L'opérateur is en C# est utilisé pour vérifier le type de l'objet et il renvoie une valeur bool : true si l'objet est du même type et false sinon. ou aussi L'opérateur "is" est utilisé pour vérifier si le type d'exécution d'un objet est compatible ou non avec un type donné. Pour les objets nuls, il renvoie false Par exemple

if(obj is AnimalObject)
{
 //Then Work
}

comme OPERATEUR

L'opérateur as fait le même travail que l'opérateur is mais la différence est qu'au lieu de bool, il renvoie l'objet s'il est compatible avec ce type, sinon il renvoie null.in otherwords, The 'as' operator is used to perform conversions between compatible types.

Par exemple

Type obj = Object as Type;

Avantages de "as over is Dans le cas de l'opérateur is, pour effectuer un cast, nous devons effectuer deux étapes :

Check the Type using is
If it’s true then Type cast

En fait, cela affecte les performances puisque, à chaque fois, le CLR va parcourir la hiérarchie d'héritage, en vérifiant chaque type de base par rapport au type spécifié.

Pour éviter cela, utilisez as, qui le fera en une seule étape. Ce n'est que pour vérifier le type que nous devons utiliser l'opérateur is.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X