JetBrains Rider 2025.2 Help

代码检查:捕获的主构造函数参数是可变的

非记录类型的主构造函数使您的类型定义更加紧凑。 然而,作为一个缺点,它们引入了一个潜在问题,即在实例成员主体中“捕获”主构造函数参数。 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(); }
最后修改日期: 2025年 9月 26日