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?