私の会社のコードベース(.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
}
Fooメソッドが単にIDを取得してBazオブジェクトを返す代わりに、使用されていない値を返して実際のオブジェクトをrefまたは出力パラメーターにするのではなく、なぜこれを行うのかを頭に入れようとしています。
私が見逃しているこのコーディングスタイルの隠された利点はありますか?
baz存在nullと返さboolれるfalse存在は同等ではありません。new BazObject()は決してないnullのでbazObject、Exceptionがスローされる前に更新されない限りFoo、falseが返さbazれる時は決してなりませんnull。場合、それは途方も役立つだろう仕様については、Foo利用可能でした。実際、これはおそらくこのコードが示す最も深刻な問題です。