ああそうか、例外が発生したってsuccess=falseだから
いずれにせよ初期化はされるんだ。
ってことはやっぱ二重初期化は本来必要ないってことだよね?
>>21の後半は取り消しで。

>>18 >>22
LargeStruct hoge;
bool ok = false;
try {
 ok = PossiblyThrowsError(out hoge);
} catch { ok = true; hoge = new LargeStruct(); }
if (!ok) hoge = new LargeStruct();

ってことっすね。失敗時の初期化が二箇所に分かれるのは気持ち悪いけど、
これしかなさそうですね。