Par exemple est-il possible d'écrire ceEn C# est-il possible d'évaluer si une variable est différente de null sans utiliser un opérateur?
si (Variable! = Null)
sans utiliser l'opérateur! = Ou ==?
Par exemple est-il possible d'écrire ceEn C# est-il possible d'évaluer si une variable est différente de null sans utiliser un opérateur?
si (Variable! = Null)
sans utiliser l'opérateur! = Ou ==?
Eh bien, je venais d'utiliser ==
(si vous essayez d'éviter un opérateur d'égalité personnalisé, peut-être jeté à object
- ce sera un casting NOP de toute façon)
autre que que, mon argent irait avec object.ReferenceEquals(obj, null)
, mais vous pouvez également utiliser object.Equals(obj, null)
car il gère null
etc.
Pour être complet: pourquoi devrais-je simplement utiliser ==
/!=
? Simple: le compilateur peut le faire directement . IL pour une nulle vérification contre un objet est en fait:
Voilà. Deux instructions IL. Il ne fait même pas de "load null, equal check" - puisque la définition de "true" est "tout ce qui n'est pas 0/null", et "false" est "0/null".
Pour quelque chose comme ReferenceEquals
, qui est la suivante:
Je sais que je préfère ...
Marc, comment le savez-vous? Comment savez-vous combien d'instructions IL est une déclaration C#? Comment puis-je l'apprendre aussi? –
@Dran: Réflecteur. De plus, je suis en train de faire beaucoup de méta-programmation, en écrivant directement IL. –
Comment vérifier si quelque chose est nul si vous ne voulez pas utiliser un opérateur? Quelle est la raison de cette question?
Avec une méthode statique? Staticclass.IsNull (variable) Je voudrais vérifier s'il est possible d'écrire du code sans utiliser d'opérateurs. –
@Dran - mais ** pourquoi ** voulez-vous écrire du code sans opérateurs? Les opérateurs sont (surtout dans ce cas) * plus rapides *. –
Vous pouvez utiliser object.ReferenceEquals
(variable, null)
.
... ou en créant une méthode d'extension et en l'appelant comme 'obj.IsNotNull()' –
Appel ToString() dessus, si vous obtenez une exception System.NullReferenceException, elle était nulle. :-)
Mais pourquoi?
Cela fonctionne. J'espère que c'était la langue dans la joue bien. –
@Martinho - très bien! –
Eh bien, la seule autre syntaxe qui correspond à votre description est d'utiliser le ?? opérateur, (qui est toujours un opérateur, je gues ...), Mais il renvoie soit la valeur, ou si la valeur est nulle, elle retourne la prochaine expressions valeur que dans
string nullStr = null;
string out1 = nullStr?? "NullString"; // out1 = "NullString";
// ------------------------------------------------------------
string realStr = "RealString";
string out2 = realStr ?? "NullString"; // out2 = "RealString";
Vous pourriez vraiment être une secousse et de l'utilisation:
if (x is object) {
// not null
}
else {
// null
}
Je ne savais pas 'is' a donné faux pour null. Merci. Pas que je vais utiliser ce code n'importe où :) –
Avez-vous besoin cela pour quelque chose de spécifique, ou juste de la curiosité ..? – flq
C'est pour la curiosité. –