web-dev-qa-db-fra.com

Quand utiliser! () Ou! = When if not null

Lors de la refactorisation du code, j’ai modifié les conditions, si non nulles, afin de respecter la convention de la majorité dans mon code de conduite.

if (!(foo == null))

au lieu de

if (foo != null)

Y at-il un avantage dans les deux déclarations?

Y a-t-il un avantage dans l'une ou l'autre déclaration en c #?

21
Nicholas Murray

Je trouve le second plus lisible.

En dehors de cela, il n'y a pas de différence.

Il est plus important de choisir une convention avec votre équipe et de la respecter dans chaque base de code.

28
Oded

En supposant que vous n'avez pas cassé les surcharges d'opérateur ==/!=, je n'utiliserais que le second formulaire pour améliorer la simplicité et la lisibilité. Si vous avez avez des surcharges brisées de telle sorte qu'il existe une différence sémantique entre les deux, je suggérerais de corriger ces surcharges :)

Dans les rares cas où foo == null est une indication plus claire de quelque chose, je le refactifierais probablement pour utiliser une variable locale:

bool somethingIsMissing = foo == null;
if (!somethingIsMissing)
{
    ...
}

Les parenthèses autour du foo == null sont maintenant facultatives - utilisez ou non, selon votre goût. L'essentiel est que vous puissiez utiliser le nom de la variable pour rendre le sens sémantique très clair .

10
Jon Skeet

normalement if (!(foo == null)) est utilisé lorsque vous avez plus de variables à prendre en compte, par exemple

if (!(f1 == 'a' && f2 != 'b'))

parfois est simplement plus facile de cette façon qui transforme tout le contraire, spécialement lorsque vous utilisez des opérateurs au niveau du bit.

6
balexandre

Le premier utilise deux opérateurs, le second en utilise un. Donc techniquement, le second est plus simple.

5
Rik

Le seul endroit où j'utiliserais !(a == b) serait dans l'implémentation d'opérateur de != comme ceci:

public static bool operator != (MyType a, MyType b)
{
    return !(a == b);
}
3
Oliver

À mon avis, il n'y a pas de différence, le compilateur optimisera quand même le code. Mais je préférerais if(foo != null). Moins de parenthèses et plus facile à lire.

2
rekire

Mon préféré est le second, car il est un peu plus lisible que le premier. 

Ils ne font aucune différence, ce n'est donc qu'une question de choix pour vous.

Cependant, si vous avez beaucoup d'autres variables dans votre clause if, la première peut être celle à utiliser.

Votre choix à la fin.

1
H Bellamy