Ich sehe das folgende Codemuster überall in der Codebasis meines Unternehmens (.NET 3.5-Anwendung):
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
}
Ich versuche, mich darum zu Fookümmern, warum Sie dies tun würden, anstatt die Methode einfach die ID nehmen und ein BazObjekt zurückgeben zu lassen, anstatt einen Wert zurückzugeben, der nicht verwendet wird, und das tatsächliche Objekt als Referenz- oder Ausgabeparameter zu haben.
Gibt es einen versteckten Vorteil dieses Codierungsstils, den ich vermisse?
bazsein nullund das zurückgegebene boolWesen falseist nicht gleichwertig. new BazObject()ist nie null, es sei denn , bazObjectaktualisiert wird , bevor die Exceptionin geworfen wird Foo, wenn falsezurückgegeben wird , bazwird es nie sein null. Es würde enorm helfen, wenn die Spezifikation für Fooverfügbar wäre. In der Tat ist dies vielleicht das schwerwiegendste Problem, das dieser Code aufweist.