Veo el siguiente patrón de código por todas partes en la base de código de mi empresa (aplicación .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
}
Estoy tratando de entender por qué haría esto en lugar de que el Foométodo simplemente tome la ID y devuelva un Bazobjeto, en lugar de devolver un valor que no se utiliza y que el objeto real sea un parámetro de referencia o salida.
¿Hay algún beneficio oculto de este estilo de codificación que me falta?
bazser nully el boolser devuelto nofalse son equivalentes. nunca es así, a menos que se actualice antes de que se lance , cuando se devuelva nunca lo será . Sería de gran ayuda enormemente si la especificación de estaban disponibles. De hecho, este es quizás el problema más grave exhibido por este código. new BazObject()nullbazObjectExceptionFoofalsebaznullFoo