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?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage