为什么Resharper的默认检查严重性为"冗余字段初始化程序"设置为"警告"

时间:2015-12-22 15:28:53

标签: c# resharper

Resharper经常抱怨我显式初始化我的类中的字段,尽管它是多余的,因为没有初始化它们将具有相同的(默认)值。但是,我经常更喜欢显式初始化,因为恕我直言,代码变得更清晰,在阅读代码时我不得不少思考。

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

我错过了什么吗?冗余初始化程序会出现什么类型的错误?

1 个答案:

答案 0 :(得分:5)

Microsoft解释了为什么冗余字段初始化是多余的,this way

  

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

绩效成本可以忽略不计,if at all present(感谢@ lex82的发现):

  

我们取消了规则CA1805,因为它解雇的案例并不真正有趣或有用。在Release构建中,用户的代码将变量初始化为类型的默认值,由编译器优化。在Debug构建中,大多数警告都是针对生成的代码,用户无法真正做任何事情。

然而,心理开销是需要考虑的事情。当一个人习惯于将字段的默认行为初始化为默认值时,看到冗余初始化是立即“WAT?”。这是什么意思?我们是否正在解决一些未记录的行为或编译器/运行时/ JIT错误?或者二进制序列化以某种方式搞乱字段?或完全不同的东西?