ReSharper 2024.1 ヘルプ

コード検査: '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); } } }

関連ページ:

コードインスペクション設定を構成する

設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...

アノテーションを使用してコードインスペクションを改善する

コード検査や他の多くの ReSharper の機能は、問題を検出し、改善を提案し、他の方法であなたを手助けするために、言語構成の動作を知ることに主に依存しています。ただし、この種の分析ではすべてを検出できるわけではありません。例: メソッドがフォーマットメソッドとして設計されている場合、メソッドの呼び出しに必要な引数が含まれていない場合、構造解析では潜在的な問題は見つかりません。この場合や他の多くの場合、ReSharper のは非常に役立ちます。このフレームワークで宣言された属性を使用することに...