私のコードは以下のようになります。オブジェクトが破棄されているため、明らかに「OK」と書くことはできません。clone が存在しないため、 return sw.Clone() を実行できません。using を使用しない場合、 = new と return の間の任意の時点で (私の例では行わないオブジェクトへの反復と書き込みのように) 例外が発生し、オブジェクトが破棄されない可能性があります。
try ブロックの外側で sw を定義し、それが null かどうかを確認してから、catch ブロックで破棄する必要がありますか? ちょっとやり過ぎのような気がします。より良い方法はありますか?それが唯一の方法ですか?
static void func1()
{
using (var sw = func2())
{
sw.WriteLine("Ok");
}
}
static StringWriter func2()
{
using (var sw = new StringWriter())
{
return sw;
}
}