ReSharper 2024.3 ヘルプ

コード検査: キャプチャーされたプライマリコンストラクターパラメーターは変更可能です

非レコード型のプライマリコンストラクターを使用すると、型定義がよりコンパクトになります。ただし、欠点として、プライマリコンストラクターパラメーターをインスタンスメンバー本体内に「キャプチャー」するという潜在的な問題が生じます。C# のすべてのパラメーター変数は変更可能です。つまり、どのインスタンスメンバーも初期化後に値を変更でき、パラメーターを読み取り専用に強制する構文はありません。

このインスペクションは、「キャプチャーされた」プライマリコンストラクターパラメーターが実際にメンバーによって変更されるケースを報告します。

クイックフィックスは、通常の可変フィールドを導入することで、可変クラスレベルの状態を明示的に表現できます。

class Service(IDependency dependency) { public void DoWork() => dependency.Use(); public void SetupHack() { dependency = new AdhocDependencyImpl(); // Warning DoWork(); } } interface IDependency { void Use(); } class AdhocDependencyImpl : IDependency { public void Use() => throw new NotImplementedException(); }
class Service(IDependency dependency) { private IDependency _dependency = dependency; public void DoWork() => _dependency.Use(); public void SetupHack() { _dependency = new AdhocDependencyImpl(); DoWork(); } } interface IDependency { void Use(); } class AdhocDependencyImpl : IDependency { public void Use() => throw new NotImplementedException(); }

関連ページ:

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

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

コード検査: 可変長エスケープシーケンスとテキストの混在を避ける

このコードインスペクションは、で始まるエスケープシーケンスについて警告します。これらのシーケンスはさまざまな長さの 16 進数で動作するため、テキストが ABCDEF で始まる場合、後続のテキストの最初の文字を誤ってシーケンスに「添付」してしまう可能性があります。それとは対照的に、エスケープシーケンスでは、の後に常に 4 桁の 16 進数が必要です。このようなエスケープシーケンスの脆弱性を軽減するためのクイックフィックスがあります。エスケープシーケンスを使用するか、文字列リテラルを分割してエスケ...