C# プロジェクトで次のオブジェクト処理コード パターンに気付きましたが、それが受け入れられるかどうか疑問に思っていました (ただし、機能します)。
public object GetData()
{
object obj;
try
{
obj = new Object();
// code to populate SortedList
return obj;
}
catch
{
return null;
}
finally
{
if (obj != null)
{
obj.Dispose();
obj = null;
}
}
}
この例では、プロジェクトの実際の IDisposable クラスではなく、一般的な「オブジェクト」を使用しています。
値が返された場合でも、「finally」ブロックが毎回実行されることはわかっていますが、オブジェクトが null に設定されているため、何らかの方法で戻り値に影響します (または、新しいオブジェクト インスタンスになります)。オブジェクトの破棄と GC の目的のため)。
更新 1:
次のスニペットを試してみましたが、返されるオブジェクトは null ではありませんが、ローカル オブジェクトは null に設定されているため、動作します。これは、以下のコメントのいくつかを考慮すると少し奇妙です。
public StringBuilder TestDate()
{
StringBuilder sb;
try
{
sb = new StringBuilder();
sb.Append(DateTime.UtcNow.ToString());
return sb;
}
catch
{
return null;
}
finally
{
sb = null;
}
}
ところで、私はC# 4.0を使用しています。
PS私はこのプロジェクトコードを見直しています。私はオリジナルの作者ではありません。
更新 2:
この謎の答えが見つかりました [1]。finally ステートメントは実行されますが、戻り値は影響を受けません (finally ブロックで設定/リセットされた場合)。