Ich konfrontiert ein Szenario, um Null Referenz für die äußeren und inneren Objekte zu überprüfen. Es besteht die Möglichkeit, dass das äußere Objekt auch ein Null- und inneres Objekt sein kann.Wie funktioniert logisches UND (&&) in C#?
if (outerObject != null && outerObject.innerObject != null)
{
outerObject.innerObject.DoSomething();
}
Wenn der zweite Ausdruck in wenn ausgewertet dann NullRefence Exception wird geworfen werden.
Ich habe eine Option zu gehen mit verschachtelter wenn wie
if(outerObject != null)
{
if(outerObject.innerObject != null)
{
outerObject.innerObject.DoSomething();
}
}
Ich möchte nur wissen, ob oder nicht der zweite Ausdruck selbst ausgewertet wird, wenn der erste Ausdruck falsch ist?
Welches ist das Beste?
Fisch oder Geflügel, die Codegenerierung für das 1. Schnipsel ist vollständig identisch mit dem zweiten Schnipsel. Genannt [Kurzschlussauswertung] (https://msdn.microsoft.com/en-us/library/2a723cdk.aspx). Die große Anzahl von Programmierern befürwortet das erste Snippet, es liegt an Ihnen, es mit Ihren Teammitgliedern zu besprechen oder Ihre eigene Wahl zu treffen. –
CSharp verwendet [Kurzschlussauswertung] (https://en.wikipedia.org/wiki/Short-circuit_evaluation), sodass der zweite Vergleich nur bei Bedarf durchgeführt wird. – martinstoeckli
Es ist so einfach und ich glaube, dass es in jedem Buch erwähnt wird (haben Sie einen gelesen?).Außerdem ist es so einfach zu testen, schreiben Sie mehrere Methoden, die 'bool' zurückgeben und mit ihnen spielen (mit' false' oder 'true'), während Sie eine Bedingung wie' if (Methode1() && Methode2() && (Methode3() || Methode4) verwenden())) ... ' – Sinatr