CA2207:以内联方式初始化值类型的静态字段
属性 | 值 |
---|---|
规则 ID | CA2207 |
标题 | 以内联方式初始化值类型的静态字段 |
类别 | 使用情况 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 9 中默认启用 | 否 |
原因
某值类型声明了显式静态构造函数。
规则说明
声明值类型时,它将接受默认的初始化,其中所有值类型字段均设置为零,而所有引用类型字段均设置为 null
(在 Visual Basic 中为 Nothing
)。 只有在调用该类型的实例构造函数或静态成员之前,才能保证运行显式静态构造函数。 因此,如果创建该类型时未调用实例构造函数,则无法保证运行静态构造函数。
如果所有静态数据都是内联初始化且未声明显式静态构造函数,则 C# 和 Visual Basic 编译器会将 beforefieldinit
标志添加到 CIL 类定义。 编译器还会添加包含静态初始化代码的专用静态构造函数。 可确保在访问该类型的任何静态字段之前运行此专用静态构造函数。
如何解决冲突
若要解决与此规则的冲突,请在声明所有静态数据时对其进行初始化,并删除静态构造函数。
何时禁止显示警告
不禁止显示此规则发出的警告。