Czy mogę wymusić własne zwarcie w wywołaniu metody?

Załóżmy, że chcę sprawdzić kilka obiektów, aby upewnić się, że żaden nie jest pusty:

if (obj != null &&
    obj.Parameters != null &&
    obj.Parameters.UserSettings != null) {

    // do something with obj.Parameters.UserSettings
}

Kuszącą perspektywą jest napisanie funkcji pomocniczej, aby zaakceptować zmienną liczbę argumentów i uprościć ten rodzaj kontroli:

static bool NoNulls(params object[] objects) {
    for (int i = 0; i < objects.Length; i++)
        if (objects[i] == null) return false;

    return true;
}

Wtedy powyższym kodem może stać się:

if (NoNulls(obj, obj.Parameters, obj.Parameters.UserSettings)) {
    // do something
}

Dobrze?Źle. Jeśliobj ma wartość null, a ja otrzymamNullReferenceException kiedy próbuję przejśćobj.Parameters doNoNulls.

Powyższe podejście jest więc wyraźnie błędne. Aleif oświadczenie za pomocą&& operator działa dobrze, ponieważ jest zwarty. Więc:czy istnieje sposób na zwarcie metody, tak aby jej argumenty nie były oceniane, dopóki nie zostaną jawnie przywołane w metodzie?

questionAnswers(3)

yourAnswerToTheQuestion