Vedo il seguente schema di codice ovunque nella base di codice della mia azienda (applicazione .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
}
Sto cercando di capire perché dovresti fare questo invece di avere il Foo
metodo semplicemente prendere l'ID e restituire un Baz
oggetto, invece di restituire un valore non utilizzato e avere l'oggetto reale come parametro ref o output.
C'è qualche vantaggio nascosto di questo stile di codifica che mi manca?
baz
essere null
e l' bool
essere restituito nonfalse
sono equivalenti. non lo è mai , quindi a meno che non venga aggiornato prima che venga lanciato , quando verrà restituito non lo sarà mai . Sarebbe aiutare moltissimo se la spec per erano disponibili. In realtà, questo è forse il problema più grave esposto da questo codice. new BazObject()
null
bazObject
Exception
Foo
false
baz
null
Foo