Veuillez dire quelle est la différence entre is
et as
mot-clé en C#
L'équivalence montre clairement lequel des deux est le plus primitif et sous-tend élégamment leur relation ! Merci pour l'équivalence !
Veuillez dire quelle est la différence entre is
et as
mot-clé en C#
Le site is
opérateur vérifie si un objet peut être converti en un type spécifique.
Exemple :
if (someObject is StringBuilder) ...
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 :
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.
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;
L'équivalence montre clairement lequel des deux est le plus primitif et sous-tend élégamment leur relation ! Merci pour l'équivalence !
@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
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) :
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é.
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)
{
...
}
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 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.
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.
1 votes
@MaxBarraclough : Merci pour la note ; Microsoft a plusieurs fois maintenant déplacé les archives de mon blog sans faire de liens de redirection. J'ai fait une copie de l'article original dans le premier commentaire ici : ericlippert.com/2010/09/16/is-is-as-or-is-as-is . Je posterai un lien vers le second dans un commentaire ultérieur.
0 votes
@MaxBarraclough : Le lien mis à jour pour le second est : ericlippert.com/2009/10/08/ -- Merci encore.