Je vois le modèle de code suivant partout dans la base de code de mon entreprise (application .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
}
J'essaie de comprendre pourquoi vous feriez cela au lieu d'avoir la Foo
méthode simplement prendre l'ID et renvoyer un Baz
objet, au lieu de renvoyer une valeur qui n'est pas utilisée et que l'objet réel soit un paramètre de référence ou de sortie.
Y a-t-il un avantage caché de ce style de codage qui me manque?
baz
être null
et l' bool
être retourné ne false
sont pas équivalents. new BazObject()
n'est jamais null
, donc à moins qu'il ne bazObject
soit mis à jour avant que le Exception
soit jeté Foo
, quand false
est retourné baz
ne le sera jamais null
. Cela aiderait énormément si les spécifications pour Foo
étaient disponibles. En fait, c'est peut-être le problème le plus grave présenté par ce code.