Kann ich mein eigenes Kurzschließen in einem Methodenaufruf erzwingen?
Angenommen, ich möchte eine Reihe von Objekten überprüfen, um sicherzustellen, dass keine null ist:
if (obj != null &&
obj.Parameters != null &&
obj.Parameters.UserSettings != null) {
// do something with obj.Parameters.UserSettings
}
Es ist eine verlockende Aussicht, eine Hilfsfunktion zu schreiben, um eine variable Anzahl von Argumenten zu akzeptieren und diese Art der Prüfung zu vereinfachen:
static bool NoNulls(params object[] objects) {
for (int i = 0; i < objects.Length; i++)
if (objects[i] == null) return false;
return true;
}
Dann könnte der obige Code lauten:
if (NoNulls(obj, obj.Parameters, obj.Parameters.UserSettings)) {
// do something
}
Recht?Falsch. Obobj
ist null, dann bekomme ich eineNullReferenceException
wenn ich versuche zu bestehenobj.Parameters
zuNoNulls
.
Der obige Ansatz ist also eindeutig falsch. Aber dieif
Anweisung mit der&&
Betreiber funktioniert gut, da es kurzgeschlossen ist. So:Gibt es eine Möglichkeit, eine Methode kurzzuschließen, sodass ihre Argumente erst ausgewertet werden, wenn in der Methode explizit darauf verwiesen wird?