CA2207:以内联方式初始化值类型的静态字段
属性 | 值 |
---|---|
规则 ID | CA2207 |
标题 | 以内联方式初始化值类型的静态字段 |
类别 | 使用情况 |
修复是中断修复还是非中断修复 | 非中断 |
在 .NET 8 中默认启用 | 否 |
原因
某值类型声明了显式静态构造函数。
规则说明
声明值类型时,它将接受默认的初始化,其中所有值类型字段均设置为零,而所有引用类型字段均设置为 null
(在 Visual Basic 中为 Nothing
)。 只有在调用该类型的实例构造函数或静态成员之前,才能保证运行显式静态构造函数。 因此,如果创建该类型时未调用实例构造函数,则无法保证运行静态构造函数。
如果所有静态数据都是内联初始化且未声明显式静态构造函数,则 C# 和 Visual Basic 编译器会将 beforefieldinit
标志添加到 CIL 类定义。 编译器还会添加包含静态初始化代码的专用静态构造函数。 可确保在访问该类型的任何静态字段之前运行此专用静态构造函数。
如何解决冲突
若要解决与此规则的冲突,请在声明所有静态数据时对其进行初始化,并删除静态构造函数。
何时禁止显示警告
不禁止显示此规则发出的警告。
相关规则
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈