コードインスペクション: 'using' ステートメントですでにキャプチャされた変数の破棄
IDisposable を実装する型の変数が using ステートメントまたは using 宣言で宣言されている場合、この変数に対して Dispose() を呼び出さないでください。 Dispose() は、対応するブロックが終了すると、それに含まれるオブジェクトに対して自動的に呼び出されます。 Dispose() を手動で呼び出すと、実質的にこのメソッドを 2 回呼び出すことになり、予期しない動作やエラーが発生する可能性があります。
using (var disposable = new MyDisposable())
{
// Warning
disposable.Dispose();
}
このインスペクションは、 using コンテキストでの Dispose() の呼び出しだけでなく、リソースの破棄を処理するカスタムメソッドも報告します。 このようなメソッドには、 JetBrains.Annotations から [HandlesResourceDisposalAttribute] のマークを付ける必要があります。
class DisposalSample
{
void HandleDisposal(
[HandlesResourceDisposal] MyDisposable resource)
{
// Custom disposal implementation
}
void Test()
{
using (var disposable = new MyDisposable())
{
// Warning
HandleDisposal(disposable);
}
}
}
2026 年 6 月 12 日