为什么是Resharper';s的默认检查严重性;冗余字段初始化器”;设置为“;警告”;

本文关键字:初始化 字段 设置 警告 冗余 检查 Resharper 为什么 默认 严重性 | 更新日期: 2023-09-27 18:27:54

Resharper经常抱怨我显式初始化类中的字段,尽管这是多余的,因为如果没有初始化,它们将具有相同的(默认)值。然而,我通常更喜欢显式初始化,因为IMHO代码变得更清晰了,而且在阅读代码时我必须少思考。

然而,当我只想关闭此检查时,我注意到默认的严重性设置为"警告"。到目前为止,我一直认为这只是一个提示,有机会删除代码中的一些字符,但现在我想知道使用冗余初始化程序是否真的有风险。

我是不是错过了什么?冗余初始化程序会发生什么样的错误?

为什么是Resharper';s的默认检查严重性;冗余字段初始化器”;设置为“;警告”;

Microsoft解释了为什么冗余字段初始化是冗余的,嗯,通过这种方式:

在大多数情况下,在构造函数中将字段初始化为默认值是多余的,这会降低性能并增加维护成本。

性能成本可以忽略不计,如果存在的话(感谢@lex82的发现):

我们取消了CA1805规则,因为它开火的情况并不是很有趣或有帮助。在Release构建中,将变量初始化为类型默认值的用户代码会被编译器优化掉。在Debug构建中,大多数警告都是针对生成的代码的,而用户实际上对此无能为力。

然而,心理开销是需要考虑的。当人们习惯于将字段初始化为默认值的默认行为时,看到冗余初始化是立即"WAT?"。这是干什么用的?我们是在处理一些未记录的行为还是编译器/运行时/JIT错误?或者二进制序列化会以某种方式扰乱字段?或者完全是别的什么?