Vejo o seguinte padrão de código em todo o lugar na base de código da minha empresa (aplicativo .NET 3.5):
bool Foo(int barID, out Baz bazObject) {
try {
// do stuff
bazObject = someResponseObject;
return true;
}
catch (Exception ex) {
// log error
return false;
}
}
// calling code
BazObject baz = new BazObject();
fooObject.Foo(barID, out baz);
if (baz != null) {
// do stuff with baz
}
Estou tentando Fooentender por que você faria isso, em vez de o método simplesmente pegar o ID e retornar um Bazobjeto, em vez de retornar um valor que não é usado e o objeto real ser um parâmetro ref ou output.
Há algum benefício oculto desse estilo de codificação que estou perdendo?
bazser nulle o boolser retornado nãofalse são equivalentes. nunca é , portanto, a menos que seja atualizado antes do lançamento , quando retornado nunca será . Ele iria ajudar tremendamente se a especificação para estavam disponíveis. De fato, esse talvez seja o problema mais sério exibido por esse código. new BazObject()nullbazObjectExceptionFoofalsebaznullFoo