Ce n'est pas correct. isne vérifie pas si un objet peut être converti en un type spécifique. Un entier convertit en une longue amende mais 10 is longest faux.
Martin Smith
9
@MartinSmith: Vous mélangez la conversion de type avec le casting. Un entier peut être converti en long, mais il ne peut pas être converti en long car ce n'est pas un long.
Guffa
2
Vous me dites qu'un entier ne peut pas être converti en long? Cela (long)some_integeréchouera? Je suis presque sûr que nous savons tous les deux que ce n'est pas vrai sans même l'exécuter, alors veuillez expliquer ce que vous voulez dire.
Martin Smith
12
@MartinSmith: Vous confondez toujours le casting avec la conversion. Vous ne convertissez pas un entier en un long, vous convertissez un entier en un long. Bien qu'elles utilisent la même syntaxe, les références sont transtypées et les valeurs sont converties.
Guffa
2
Remarque concernantis : " Notez que l' opérateur is ne prend en compte que les conversions de référence, les conversions de boxe et les conversions de déballage. Les autres conversions, telles que les conversions définies par l'utilisateur, ne sont pas prises en compte. " (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). À propos deas : " Notez que l' opérateur as n'effectue que des conversions de référence, des conversions Nullable et des conversions boxing. L'opérateur as ne peut pas effectuer d'autres conversions, telles que des conversions définies par l'utilisateur, qui doivent être effectuées à la place à l'aide d'expressions de conversion . " ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )
user1234567
33
La différence entre IS et As est que ...
IS - Is Operator est utilisé pour vérifier la compatibilité d'un objet avec un type donné et il renvoie le résultat sous la forme d'un booléen (vrai ou faux).
AS - As Operator est utilisé pour convertir un objet en un type ou une classe donné.
Ex.
Student s = obj asStudent;
est équivalent à:
Student s = obj isStudent?(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!
Musa Al-hassy
1
@ MusaAl-hassy En fait, cela ne montre pas ce qui est le plus primitif. ispeut être exprimé avec aset aspeut être exprimé avec is. Voici comment créer un isavec le asmot - clé. Bool b = obj is Student; équivaut à: Bool b = (obj as Student) != null; Plus d'informations ici
Alex Telon
8
Les mots clés iset assont utilisés pour la conversion de type en C #.
Lorsque vous regardez le code IL des utilisations des deux mots-clés, vous obtiendrez facilement la différence.
Code C #:
BaseClass baseclassInstance =newDerivedClass();DerivedClass derivedclassInstance;if(baseclassInstance isDerivedClass){
derivedclassInstance =(DerivedClass)baseclassInstance;// do something on derivedclassInstance}
derivedclassInstance = baseclassInstance asDerivedClass;if(derivedclassInstance !=null){// do something on derivedclassInstance}
Code IL (pour le code C # ci-dessus est dans l'image jointe):
Le code IL pour l' isutilisation des mots clés contient des instructions IL à la fois isinstaet castclass.
Mais le code IL pour l' asutilisation des mots clés n'a que isinsta.
Dans l'utilisation mentionnée ci-dessus, deux transtypages se produiront là où le ismot-clé est utilisé et un seul transtypage où le asmot-clé est utilisé.
Remarque: Si vous utilisez un ismot-clé pour vérifier une condition et que vous ne vous intéressez pas au résultat du transtypage, il n'y aura qu'un seul transtypage, c'est-à-dire
if(baseclassInstance isDerivedClass){// do something based on the condition check.}
iset les asmots - 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 isstring){...}
Notez que dans ce cas, vous devrez utiliser un cast explicite supplémentaire pour obtenir obj sous forme de chaîne.
Le mot clé as est utilisé pour convertir les types Nullable. Si la valeur spécifiée n'est pas une instance du type spécifié, null est renvoyé. Par exemple:
L'opérateur "as" ne lèvera pas non plus d'exception, il retournera simplement null.
Pinte Dani
Correction de la faute de frappe concernant 'est' et 'comme'
Patrick Peters
2
L'opérateur Is, un cast, renvoie true s'il réussit. Il renvoie false si la distribution échoue. Avec lui, vous ne pouvez pas capturer la variable convertie. Cet opérateur est le plus utile lors de la vérification des types dans les instructions if et les expressions.
Tout comme un casting. Avec lui, nous gagnons en performance et évitons les exceptions lorsqu'une distribution est invalide. Null est renvoyé lorsque la distribution est impossible. Pour les types de référence, le format tel que cast est recommandé. C'est à la fois rapide et sûr.Nous pouvons tester la variable résultante par rapport à null, puis l'utiliser. Cela élimine les lancers supplémentaires
is OPERATOR
L'opérateur is en C # est utilisé pour vérifier le type d'objet et il renvoie une valeur booléenne: true si l'objet est du même type et false dans le cas contraire. ou aussi L'opérateur «est» permet de 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 isAnimalObject){//Then Work}
comme OPERATOR
L'opérateur as fait le même travail que l'opérateur is mais la différence est au lieu de booléen, il renvoie l'objet s'il est compatible avec ce type, sinon il retourne null. En d'autres termes, l'opérateur 'as' est utilisé pour effectuer des conversions entre compatibles les types.
par exemple
Type obj =ObjectasType;
Avantages de as over is
Dans le cas de l'opérateur is, pour taper cast, nous devons faire deux étapes:
Check the Type using isIf it’s true then Type cast
En fait, cela affecte les performances puisque chaque fois que le CLR passera par la hiérarchie d'héritage, en vérifiant chaque type de base par rapport au type spécifié.
Pour éviter cela, utilisez as, il le fera en une seule étape. Nous ne devons utiliser l'opérateur is que pour vérifier le type.
Votre réponse est correcte, mais votre exemple de code est un anti-modèle. C'est cher à faire isalors as: ça déballe deux fois. Pour les types de référence, vous devez simplement le faire as, puis vérifier la valeur null pour voir si cela a fonctionné.
Steven Sudit
1
Jetez un œil à la vidéo youtube ci-dessous qui explique la différence d'une manière plus démonstrative et visuelle: -
Ci-dessous, la réponse longue avec l'explication du code.
Le mot clé «IS» est utile pour vérifier si les objets sont compatibles avec un type. Par exemple, dans le code ci-dessous, nous vérifions si l'objet «ocust» est un type de classe «Client».
object ocust =newCustomer();if(ocust isCustomer){
Le mot-clé "AS" permet d'effectuer la conversion d'un type à un autre type. Par exemple, dans le code ci-dessous, nous convertissons un objet en un type de données chaîne. Si le mot-clé «AS» ne peut pas taper cast, il renvoie NULL.
IS et AS sont utilisés pour le moulage de type sécurisé
IS Keyword -> vérifie si le type d'un objet donné est compatible avec le nouveau type d'objet. Il ne lève jamais d'exception. Il s'agit d'un type booléen .. renvoie soit vrai soit faux
`student stud =new student(){}if(stud is student){}// It returns true // let say boys as derived classif(stud is boys){}// It returns false since stud is not boys type//this returns true when,
student stud =new boys()// this return true for both if conditions.`
AS Keyword: vérifie si le type d'un objet donné est compatible avec le nouveau type d'objet. Il retourne non nul si l'objet donné est compatible avec le nouveau, sinon nul. Cela lève une exception.
`student stud =new student(){}// let say boys as derived class
boys boy = stud as boys;//this returns null since we cant convert stud type from base class to derived class
student stud =new boys()
boys boy = stud as boys;// this returns not null since the obj is pointing to derived class`
Les deux opérateurs sont utilisés pour le moulage de type sûr.
Opérateur AS:
L'opérateur AS vérifie également si le type d'un objet donné est compatible avec le nouveau type d'objet. Ce mot clé vérifie si le type d'un objet donné est compatible avec le nouveau type d'objet. S'il n'est pas compatible avec le nouveau, il retournera NULL.
Opérateur SI:
Cet opérateur vérifie si le type d'un objet est compatible avec le nouvel objet. S'il est compatible, il renvoie vrai sinon faux.
Réponses:
est
L'
is
opérateur vérifie si un objet peut être converti en un type spécifique.Exemple:
comme
L'
as
opérateur tente de convertir un objet en un type spécifique et renvoie null en cas d'échec.Exemple:
Aussi lié:
Fonderie
L' opérateur de conversion tente de convertir un objet en un type spécifique et lève une exception en cas d'échec.
Exemple:
la source
is
ne vérifie pas si un objet peut être converti en un type spécifique. Un entier convertit en une longue amende mais10 is long
est faux.(long)some_integer
échouera? Je suis presque sûr que nous savons tous les deux que ce n'est pas vrai sans même l'exécuter, alors veuillez expliquer ce que vous voulez dire.is
: " Notez que l' opérateur is ne prend en compte que les conversions de référence, les conversions de boxe et les conversions de déballage. Les autres conversions, telles que les conversions définies par l'utilisateur, ne sont pas prises en compte. " (Msdn.microsoft.com/en-us/library/scekt9xw .aspx). À propos deas
: " Notez que l' opérateur as n'effectue que des conversions de référence, des conversions Nullable et des conversions boxing. L'opérateur as ne peut pas effectuer d'autres conversions, telles que des conversions définies par l'utilisateur, qui doivent être effectuées à la place à l'aide d'expressions de conversion . " ( Msdn .microsoft.com / en-us / library / cscsdfbt.aspx )La différence entre IS et As est que ...
IS - Is Operator est utilisé pour vérifier la compatibilité d'un objet avec un type donné et il renvoie le résultat sous la forme d'un booléen (vrai ou faux).
AS - As Operator est utilisé pour convertir un objet en un type ou une classe donné.
Ex.
est équivalent à:
la source
is
peut être exprimé avecas
etas
peut être exprimé avecis
. Voici comment créer unis
avec leas
mot - clé.Bool b = obj is Student;
équivaut à:Bool b = (obj as Student) != null;
Plus d'informations iciLes mots clés
is
etas
sont utilisés pour la conversion de type en C #.Lorsque vous regardez le code IL des utilisations des deux mots-clés, vous obtiendrez facilement la différence.
Code C #:
Code IL (pour le code C # ci-dessus est dans l'image jointe):
Le code IL pour l'
is
utilisation des mots clés contient des instructions IL à la foisisinsta
etcastclass
.Mais le code IL pour l'
as
utilisation des mots clés n'a queisinsta
.Dans l'utilisation mentionnée ci-dessus, deux transtypages se produiront là où le
is
mot-clé est utilisé et un seul transtypage où leas
mot-clé est utilisé.Remarque: Si vous utilisez un
is
mot-clé pour vérifier une condition et que vous ne vous intéressez pas au résultat du transtypage, il n'y aura qu'un seul transtypage, c'est-à-direis
et lesas
mots - clés seront utilisés en fonction de la nécessité.la source
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:
Notez que dans ce cas, vous devrez utiliser un cast explicite supplémentaire pour obtenir obj sous forme de chaîne.
Le mot clé as est utilisé pour convertir les types Nullable. Si la valeur spécifiée n'est pas une instance du type spécifié, null est renvoyé. Par exemple:
la source
Je dirais: lisez MSDN en ligne, mais le voici:
L'opérateur is vérifie si un objet est compatible avec un type donné et le résultat de l'évaluation est un booléen: vrai ou faux.
L'opérateur as ne lèvera jamais d'exception.
la source
L'opérateur Is, un cast, renvoie true s'il réussit. Il renvoie false si la distribution échoue. Avec lui, vous ne pouvez pas capturer la variable convertie. Cet opérateur est le plus utile lors de la vérification des types dans les instructions if et les expressions.
Tout comme un casting. Avec lui, nous gagnons en performance et évitons les exceptions lorsqu'une distribution est invalide. Null est renvoyé lorsque la distribution est impossible. Pour les types de référence, le format tel que cast est recommandé. C'est à la fois rapide et sûr.Nous pouvons tester la variable résultante par rapport à null, puis l'utiliser. Cela élimine les lancers supplémentaires
la source
la source
is OPERATOR L'opérateur is en C # est utilisé pour vérifier le type d'objet et il renvoie une valeur booléenne: true si l'objet est du même type et false dans le cas contraire. ou aussi L'opérateur «est» permet de 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
comme OPERATOR
L'opérateur as fait le même travail que l'opérateur is mais la différence est au lieu de booléen, il renvoie l'objet s'il est compatible avec ce type, sinon il retourne null. En d'autres termes, l'opérateur 'as' est utilisé pour effectuer des conversions entre compatibles les types.
par exemple
Avantages de as over is Dans le cas de l'opérateur is, pour taper cast, nous devons faire deux étapes:
En fait, cela affecte les performances puisque chaque fois que le CLR passera par la hiérarchie d'héritage, en vérifiant chaque type de base par rapport au type spécifié.
Pour éviter cela, utilisez as, il le fera en une seule étape. Nous ne devons utiliser l'opérateur is que pour vérifier le type.
la source
L'opérateur As est similaire à un cast, mais renvoie null au lieu d'une exception en cas d'échec.
Et l'opérateur Is est utilisé pour vérifier si un objet est compatible avec un certain type. Il est généralement utilisé dans les instructions If.
la source
is
: L'opérateur is permet de vérifier si le type d'exécution d'un objet est compatible avec un type donnéas
: L'opérateur as est utilisé pour effectuer des conversions entre les types compatibles.la source
is
alorsas
: ça déballe deux fois. Pour les types de référence, vous devez simplement le faireas
, puis vérifier la valeur null pour voir si cela a fonctionné.Jetez un œil à la vidéo youtube ci-dessous qui explique la différence d'une manière plus démonstrative et visuelle: -
https://www.youtube.com/watch?v=IKmRtJcRX_I
Ci-dessous, la réponse longue avec l'explication du code.
Le mot clé «IS» est utile pour vérifier si les objets sont compatibles avec un type. Par exemple, dans le code ci-dessous, nous vérifions si l'objet «ocust» est un type de classe «Client».
Le mot-clé "AS" permet d'effectuer la conversion d'un type à un autre type. Par exemple, dans le code ci-dessous, nous convertissons un objet en un type de données chaîne. Si le mot-clé «AS» ne peut pas taper cast, il renvoie NULL.
la source
contre
Le second retournera null si obj n'est pas une MyClass, plutôt que de lancer une exception de conversion de classe.
est retournera seulement vrai ou faux
la source
IS et AS sont utilisés pour le moulage de type sécurisé
IS Keyword -> vérifie si le type d'un objet donné est compatible avec le nouveau type d'objet. Il ne lève jamais d'exception. Il s'agit d'un type booléen .. renvoie soit vrai soit faux
AS Keyword: vérifie si le type d'un objet donné est compatible avec le nouveau type d'objet. Il retourne non nul si l'objet donné est compatible avec le nouveau, sinon nul. Cela lève une exception.
la source
Les deux opérateurs sont utilisés pour le moulage de type sûr.
Opérateur AS:
L'opérateur AS vérifie également si le type d'un objet donné est compatible avec le nouveau type d'objet. Ce mot clé vérifie si le type d'un objet donné est compatible avec le nouveau type d'objet. S'il n'est pas compatible avec le nouveau, il retournera NULL.
Opérateur SI:
Cet opérateur vérifie si le type d'un objet est compatible avec le nouvel objet. S'il est compatible, il renvoie vrai sinon faux.
la source