CA2207:以内联方式初始化值类型的静态字段

属性
规则 ID CA2207
标题 以内联方式初始化值类型的静态字段
类别 使用情况
修复是中断修复还是非中断修复 非中断
在 .NET 8 中默认启用

原因

某值类型声明了显式静态构造函数。

规则说明

声明值类型时,它将接受默认的初始化,其中所有值类型字段均设置为零,而所有引用类型字段均设置为 null(在 Visual Basic 中为 Nothing)。 只有在调用该类型的实例构造函数或静态成员之前,才能保证运行显式静态构造函数。 因此,如果创建该类型时未调用实例构造函数,则无法保证运行静态构造函数。

如果所有静态数据都是内联初始化且未声明显式静态构造函数,则 C# 和 Visual Basic 编译器会将 beforefieldinit 标志添加到 CIL 类定义。 编译器还会添加包含静态初始化代码的专用静态构造函数。 可确保在访问该类型的任何静态字段之前运行此专用静态构造函数。

如何解决冲突

若要解决与此规则的冲突,请在声明所有静态数据时对其进行初始化,并删除静态构造函数。

何时禁止显示警告

不禁止显示此规则发出的警告。

CA1810:以内联方式初始化引用类型的静态字段