¿Puedo forzar mi propio cortocircuito en una llamada de método?

Supongamos que quiero revisar un montón de objetos para asegurarme de que ninguno sea nulo:

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

    // do something with obj.Parameters.UserSettings
}

Es una posibilidad atractiva escribir una función auxiliar para aceptar un número variable de argumentos y simplificar este tipo de verificación:

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

    return true;
}

Entonces el código anterior podría convertirse en:

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

¿Derecha?Incorrecto. Siobj es nulo, entonces obtendré unNullReferenceException cuando trato de pasarobj.Parameters aNoNulls.

Así que el enfoque anterior está claramente equivocado. Pero elif declaración utilizando el&& El operador funciona bien ya que está en cortocircuito. Asi que:¿Hay alguna manera de hacer que un método esté en cortocircuito, de modo que sus argumentos no se evalúen hasta que se haga una referencia explícita dentro del método?

Respuestas a la pregunta(3)

Su respuesta a la pregunta