2008-11-19 6 views
6

Quelle est la différence entreDifférence nulle

if(null==object) 

et

if(object==null) 

S'il vous plaît donner l'avantage à l'utilisation ci-dessus.

Répondre

12

La différence vient si vous tapez accidentellement = au lieu de ==:

if (null = object) - erreur du compilateur
if (object = null) - Bug!

+0

En C# utilisant l'opérateur d'affectation à la place du résultat booléen est une erreur de temps de compilation. – Pradeep

+0

ce qui est bon à savoir .. mais la question n'a pas été marqué à l'origine «C#»: D – warren

+0

En effet ... J'ai supprimé l'étiquette – Greg

3

Aucune différence. (null == object) est une pratique de C/C++, où "=" est à la fois utilisé comme opérateur d'affectation, et comme opérateur de comparaison.

Il y avait trop d'erreurs si if (objet = null) était utilisé.

+0

Maintenant, soyez courageux, et dites-moi pourquoi cela a été voté. –

+0

Je n'ai aucun lien avec cet article, mais pourquoi quelqu'un a-t-il voté? Je suis d'accord qu'il duplique les opinions, mais qu'au lieu de voter, il faut simplement garder le calme. – Pradeep

+0

parce que la réponse telle que soumise à l'origine n'était ni complète ni utile - "Pas de différence" ne suffit pas :) – warren

2

Certains préfèrent if (null == object) de sorte que si vous tapez accidentellement = au lieu de ==, vous obtenez une erreur de compilation au lieu d'une affectation.

+0

... si vous utilisez C ou C++, et que les avertissements ne sont pas suffisamment élevés. –

2

Logiquement, il n'y a pas de différence.

d'une erreur vérification point de vue, la première est plus souhaitable, car si vous manquez un signe égal (=), le compilateur vous permettra de savoir que vous ne pouvez pas faire une cession à une constante.

0

Dans de nombreux langages == est l'opérateur de comparaison = est l'opérateur d'affectation.

Il est très facile de taper = quand vous voulez vraiment dire ==.

Par conséquent, la convention de typage constant == variable est préférée. Constant = variable ne compilera pas, vous indiquant ainsi votre erreur.

Variable = constante compilera et fera la mauvaise chose au moment de l'exécution.

4

Eh bien, voici quelque chose que je peu comme ... utiliser des extensions:

public static class ObjectExtensions 
{ 
    public static bool IsNull(this object target) 
    { 
     return null == target; 
    } 
} 

Maintenant, vous pouvez oublier complètement:

if(item.IsNull()) 
+0

Je n'aime pas ça. Je pense va beaucoup trop loin avec des extensions. De plus, je n'aime pas appeler les méthodes statiques sur les variables membres. Et puis il faut aussi une double prise pour voir quelqu'un appeler une méthode sur une variable qui peut être probablement nulle. ... Mais ça marche, je suppose. – BobbyShaftoe

+0

Donc, en substance, vous n'aimez pas les méthodes d'extension ... –

6

Dans le bon vieux temps, compilateurs serait heureusement vous permettre de faire des affectations à l'intérieur de conditions, conduisant à des erreurs involontaires:

if(a = false) 
{ 
    // I'll never execute 
} 
if(b = null) 
{ 
    // I'll never execute 
} 
b.Method(); // And now I'm null! 

Ainsi, certains développement intelligent rs ont commencé à mettre leurs constantes en premier dans leurs conditions:

if(false = a) // OOPS! Compiler error 
{ 
    // .. 
} 
if(null = b) // OOPS! Compiler error 
{ 
    // .. 
} 

Ainsi, ils se sont entraînés pour éviter toute une classe d'erreurs. La plupart des compilateurs modernes ne vous laisseront plus faire cette erreur, mais la pratique continue.

Il y a un autre avantage à mettre toujours d'abord vos constantes:

if(myString != null && myString.Equals("OtherString")) 
{ 
    // ... 
} 

peut (en .NET, Java, et la plupart des langages avec un type de chaîne à base d'objets) être réduite à:

if("OtherString".Equals(myString)) 
{ 
    // .. 
}