Posso forçar meu próprio curto-circuito em uma chamada de método?

Suponha que eu queira verificar um monte de objetos para garantir que nenhum seja nulo:

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

    // do something with obj.Parameters.UserSettings
}

É uma perspectiva sedutora escrever uma função auxiliar para aceitar um número variável de argumentos e simplificar esse tipo de verificação:

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

    return true;
}

Então o código acima pode se tornar:

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

Certo?Errado. E seobj é nulo, então eu vou pegar umNullReferenceException quando tento passarobj.Parameters paraNoNulls.

Portanto, a abordagem acima é claramente equivocada. Mas oif declaração usando o&& operador funciona bem, pois está em curto-circuito. Assim:Existe alguma maneira de fazer um método curto-circuito, para que seus argumentos não são avaliados até explicitamente referenciados dentro do método?

questionAnswers(3)

yourAnswerToTheQuestion