ReSharper 2026.1 Help

コードインスペクション:キャプチャ対象のプライマリコンストラクターパラメーターは変更可能です

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

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

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

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(); }
2026 年 6 月 12 日