8
votes

Comment pouvez-je vérifier le mieux si un XOR B est NULL?

Quelle est la meilleure façon de vérifier si seulement A est NULL ou que B est NULL? J'ai essayé de nombreuses façons différentes de trouver quelque chose qui se sent propre, et c'est à quel point il est convolué:

bool CheckForNull(object a, object b)
{
    return a == null && b != null || a != null && b == null;
}


0 commentaires

3 Réponses :


17
votes

Qu'en est-il de cela:

return (a == null) != (b == null);


0 commentaires

1
votes

Vous pouvez utiliser l'opérateur XOR

bool CheckForNull(object a, object b)
{
    return (a == null ^ b == null);
}


0 commentaires

2
votes

Si vous avez besoin / souhaitez utiliser XOR, vous pouvez utiliser: xxx

mais pour que cela fonctionne, true doit évaluer à la même "valeur" .

Mais dans ce cas, je pense que je le garderais aussi simple que possible. Votre deuxième version n'a pas l'air si mal réellement: xxx

et il y a une possibilité d'une sortie tôt . (Et si de la chance, le compilateur peut même l'optimiser cela à être exécuté en parallèle (pipelining d'instructions)).


3 commentaires

Vrai doit évaluer à la même valeur? Watcha signifie? Quand est-ce vrai pas égal à vrai?


@Évorlor selon la langue, tout ce qui n'est pas zéro peut être évalué à vrai (0 est faux, tout le reste est vrai). Donc, si votre gauche «vraie» est 1 et la droite est 2, le XOR ne fonctionnera pas comme prévu.


La question a la balise C #. Pas besoin de me demander quelle langue.