Gibt es einen Unterschied zwischen zwei Aussagen?
%Vor%und
%Vor%Wenn beide gleich behandelt werden, was ist vorzuziehen?
Der Unterschied hier ist der generierte Code. Die beiden werden nicht den exakt gleichen Code erzeugen, aber in der Praxis wird dies keinen Einfluss auf die Ergebnisse oder die Leistung der beiden Aussagen haben.
Wenn Sie jedoch eigene Typen erstellen und den Ungleichheitsoperator überschreiben und einen schlechten Job ausführen, ist das wichtig.
Bedenken Sie Folgendes:
%Vor% In diesem Fall, wenn das erste Argument des Operators null ist, d. if (null != obj)
, dann stürzt es mit NullReferenceException
ab.
Also zusammenfassend:
Nun, der Grund, warum ich glaube, dass Sie fragen, ist, dass Sie Code von C gesehen haben, der normalerweise folgenden Code hatte:
%Vor%Beachten Sie, dass ich hier zur Überprüfung der Gleichheit wechselte. Der Grund ist, dass ein häufiger Fehler in Programmen, die mit alten C-Compilern geschrieben wurden (heutzutage neigen sie dazu, dieses Problem zu bekommen) darin besteht, sie umzuschalten und eines der gleichen Zeichen zu vergessen, d. das:
%Vor% Dies weist null
der Variablen zu, anstatt sie zu vergleichen. Der beste Weg, diesen Bug zu bekämpfen, wäre, ihn zu ändern, da du null
nichts zuweisen kannst, es ist keine Variable. dh. Dies könnte nicht kompiliert werden:
Nein, ist es nicht. Es ist genau dasselbe.
Der Stil null == obj
wird manchmal nur verwendet, um zu verhindern, dass der allgemeine Typo obj = null
nicht versehentlich einer Variablen null zuweist, aber mit !=
gibt es absolut keinen Grund dafür.
In .NET kompiliert es nicht für den Typo obj = null
.
Der Compiler verhindert also, dass Sie es versehentlich tun.
Die Yoda-Bedingung kommt ursprünglich aus anderen Sprachen, wo dies Compiler-Feature fehlt.
Sie sind genau gleich.
Manche Leute ziehen es vor, den Nullpunkt als ersten Teil des Ausdrucks zu verwenden, um Fehler wie diesen zu vermeiden.
%Vor% Aber das gilt natürlich nicht für den Operator !=
. In Ihrem Beispiel ist das also nur ein Stilunterschied.
Die Verwendung des ersten Formulars
%Vor% stammt aus den Tagen, an denen Compiler if (obj = blah)
, d. h. unbeabsichtigte Zuweisung, nicht abfangen würden, es sei denn, die Kompilierungswarnstufe wurde auf
Der erste Anweisungstyp stammt von C / C ++ , wobei es möglich war, keine booleschen Werte an die Bedingungsprüfung zu übergeben. Z.B. alles andere als 0 war wahr, und null war falsch:
%Vor%Manchmal hat es Probleme verursacht, wenn Sie vergessen haben, ein '=' Zeichen einzugeben:
%Vor%Also wurde die Yoda-Syntax verwendet, um einen Compiler-Fehler zu erhalten, falls ein '=' nicht gefunden wurde:
%Vor%C # erlaubt nur booleschen Wert in Bedingungen, also
%Vor%Was ist mit booleschen Typen?
%Vor%Nun, das ist nutzloser Code, denn du kannst einfach if (y) schreiben. Fazit: Die Yoda-Syntax ist weg von C / C ++ und du brauchst sie nicht mehr zu benutzen.