コード検査: ラムダ式 / 匿名メソッドには、含まれているコンテキストのキャプチャーが含まれていてはなりません
C# のラムダ式は、通常、パフォーマンスとメモリへの影響に関連しています。ラムダ式が提供する抽象化は、ほとんどのシナリオで追加コストの価値がありますが、これらのコストは一部のホットパスコードでは受け入れられない場合があります。
このようなコードを区別するために、[RequireStaticDelegate] 属性を JetBrains.Annotations から使用できます。この属性は、この属性でアノテーションが付けられたパラメーターに渡されるラムダ式に含まれるコンテキストのキャプチャーをレポートすることにより、割り当てのないコーディング手法を適用します。含まれているコンテキストをキャプチャーしないラムダ式は、デリゲートインスタンスを一度だけ割り当て、残りのプログラム実行のためにキャッシュするため、このようなラムダ式は割り当てがなくなります。
これは、ユーザーが Func デリゲート型入力パラメーターを使用してキャッシュされた値を計算することを期待する API の例です。
... しかし、間違いを犯して、x パラメーターの代わりに変数 key をキャプチャーするのは簡単すぎます。
ReSharper はそのようなキャプチャーを報告しますが、クイックフィックスを提案することはありません。呼び出しコンテキストから何もキャプチャーせずにコードが正しく機能することを確認する必要があります。
デリゲートパラメーターとしてメソッドを渡す場合、ReSharper は、コンパイラーレベルでのキャプチャーを防ぐために、可能な場合はラムダ式に static 修飾子を追加することを提案します。
関連ページ:
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
アノテーションを使用してコードインスペクションを改善する
コード検査や他の多くの ReSharper の機能は、問題を検出し、改善を提案し、他の方法であなたを手助けするために、言語構成の動作を知ることに主に依存しています。ただし、この種の分析ではすべてを検出できるわけではありません。例: メソッドがフォーマットメソッドとして設計されている場合、メソッドの呼び出しに必要な引数が含まれていない場合、構造解析では潜在的な問題は見つかりません。この場合や他の多くの場合、ReSharper のは非常に役立ちます。このフレームワークで宣言された属性を使用することに...