コード検査: クロージャの foreach 変数へのアクセス
まず、クロージャ(英語)とは何かを理解していることを確認しましょう。簡単に言うと、C# のクロージャは、ラムダ式または外部スコープからいくつかの変数をキャプチャーする匿名メソッドです。最も簡単な例を次に示します。
上記の例では、print
は変数 myStr
(その値ではなく)をキャプチャーし、print()
を呼び出したときにのみ myStr
の値を取得します。
より複雑なシナリオでは、クロージャが変化するコンテキストで定義されると、期待通りに動作しないことがあります。
発生する可能性のある状況の 1 つは、C# 4.0(Visual Studio 2010)またはそれ以前のバージョンでコンパイルされた foreach
ステートメント内で定義されたクロージャです。
C# 5.0(Visual Studio 2012)の前に、コンパイラーは foreach
を while
ステートメントに展開し、ループ外に定義された反復変数を使用します。この変数がクロージャーで使用された場合、後でこのクロージャーを呼び出すと、ループの最後の反復に対応する値が常に得られます。
JetBrains Rider はこの問題を検出し、ループ変数の値をクロージャが定義されているスコープにコピーすることで解決することを提案します。
この修正により、myActions
からアクションを選択し、このアクションが作成されたコンテキストを取得すると、str
は対応する反復の値を保持します。
関連ページ:
![](https://resources.jetbrains.com/help/img/rider/2024.1/code_analysis_target_framework.png)
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、JetBrains Rider はサポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかにかかわらず、コードインスペクションを特定の範囲でいつでも実行できます。「鉛筆」ウィジェットを使用して、エディターから直接インスペクション設定をすばやく調整するか、設定でより詳細な構成を行うことができます。を押すか、メニューから(W...
![](https://pleiades.io/icons/rider.png)
コード検査: 派生型を介した型の静的メンバーへのアクセス
このエラーは、型から派生した型を介して型の静的メンバーにアクセスするコードで発生します。例:class A { public static int N; } class B : A { } static void Main(string [] args) { B.N = 3; // warning here } 上記のコードは、フィールドがタイプに属しているのに、そうではないという誤った認識を引き起こします。さらに、型とが異なるアセンブリに導入された場合、メソッドはのアセンブリに不要な依存関係を導...