Setzt auf & amp; & amp; Kurzschluss in .NET sicher?
Übernehmen myObj, null ist. Ist es sicher, dies zu schreiben?
if(myObj != null && myObj.SomeString != null)
Weiß ich, dass einige Sprachen nicht ausgeführt, der zweite Ausdruck ist, denn die && false ausgewertet wird, bevor der zweite Teil ausgeführt.
InformationsquelleAutor der Frage patrick | 2011-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja. In C#
&&
und||
sind Kurzschluss-und so wertet der rechten Seite nur, wenn die linke Seite nicht bereits bestimmen das Ergebnis. Die Betreiber&
und|
auf der anderen Seite nicht Kurzschluss-und immer bewerten beide Seiten.Die spec sagt:
(C# Language Specification Version 4.0 - 7.12 Bedingte logische Operatoren)
Eine interessante Eigenschaft von
&&
und||
ist, dass Sie durch einen Kurzschluss, auch wenn Sie nicht arbeiten auf bools, aber Typen, wo der Benutzer überladen der Operatoren&
oder|
zusammen mit dertrue
undfalse
Betreiber.(C# Language Specification Version 4.0 - 7.12.2 Benutzer-definiert bedingte logische Operatoren)
InformationsquelleAutor der Antwort CodesInChaos
Ja, C# verwendet logische Kurzschluss.
Beachten, dass, obwohl C# (und einige andere .NET-Sprachen) auf diese Weise Verhalten, es ist eine Eigenschaft der Sprache, nicht der CLR.
InformationsquelleAutor der Antwort harpo
Ich weiß, ich bin spät zur party, aber in C# 6.0 Sie können dies auch tun:
Ist das gleiche wie oben.
Siehe auch:
Was bedeutet Fragezeichen und Punkt-operator ?. meine in C# 6.0?
InformationsquelleAutor der Antwort Drew Delano
Dein code ist sicher - && und || sind beide kurzgeschlossen. Können Sie nicht-Kurzschluss-Operatoren & oder |, bewerten die beiden enden, aber ich sehe wirklich nicht, dass viel Produktion code.
InformationsquelleAutor der Antwort Joe Enos
sicher, es ist sicher auf C#, wenn der erste operand falsch ist, der zweite ist nie ausgewertet.
InformationsquelleAutor der Antwort Mauricio
ein Beispiel ist
Diese Linie würde eine null-exception aus, wenn beide Seiten ausgeführt.
Interessante Randnotiz. Das obige Beispiel ist ganz ein bisschen schneller als die Methode IsNullorEmpty.
InformationsquelleAutor der Antwort Bengie
Ist es vollkommen sicher. C# ist eine dieser Sprachen.
InformationsquelleAutor der Antwort Ilya Kogan
Ja, C# und die meisten Sprachen berechnen Sie die wenn-Sätze, die von Links nach rechts.
VB6 durch die Art und Weise berechnen, die ganze Sache, und wirft eine Ausnahme, wenn es null...
InformationsquelleAutor der Antwort Yochai Timmer
In C#
&&
und||
sind kurzgeschlossen, was bedeutet, dass die erste Bedingung wird ausgewertet, und der rest wird ignoriert, wenn die Antwort bestimmt ist.In VB.NET,
AndAlso
undOrElse
sind auch kurzgeschlossen.In javaScript
&&
und||
sind kurzgeschlossen zu werden.Ich erwähnen VB.NET um zu zeigen, dass das hässliche red-headed Schritt-Kind .Netto hat auch Coole Sachen, manchmal.
Ich erwähnen, javaScript, weil wenn Sie tun, web-Entwicklung, dann wird man eventuell auch javaScript.
InformationsquelleAutor der Antwort John Grabauskas