C# 为什么Resharper';s“的默认检查严重性”;“冗余字段初始值设定项”;设置为";警告";

C# 为什么Resharper';s“的默认检查严重性”;“冗余字段初始值设定项”;设置为";警告";,c#,resharper,C#,Resharper,Resharper经常抱怨我显式初始化了类中的字段,尽管这是多余的,因为如果没有初始化,它们将具有相同的(默认)值。然而,我通常更喜欢显式初始化,因为IMHO代码变得更清晰了,在阅读代码时,我不得不考虑得更少 但是,当我只想关闭此检查时,我注意到默认严重性设置为“警告”。直到现在,我一直认为这只是一个删除代码中某些字符的提示,但现在我想知道使用冗余初始值设定项是否真的有风险 我错过什么了吗?冗余初始化器会出现什么样的错误?Microsoft解释了为什么冗余字段初始化是冗余的: 在大多数情况下,在

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

但是,当我只想关闭此检查时,我注意到默认严重性设置为“警告”。直到现在,我一直认为这只是一个删除代码中某些字符的提示,但现在我想知道使用冗余初始值设定项是否真的有风险


我错过什么了吗?冗余初始化器会出现什么样的错误?

Microsoft解释了为什么冗余字段初始化是冗余的:

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

性能成本可以忽略不计(感谢@lex82的发现):

我们取消了CA1805规则,因为它触发的案例并不真正有趣或有用。在版本构建中,将变量初始化为类型默认值的用户代码会被编译器优化。在调试版本中,大多数警告都针对用户无法真正处理的生成代码


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

Microsoft解释了为什么冗余字段初始化是冗余的:

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

性能成本可以忽略不计(感谢@lex82的发现):

我们取消了CA1805规则,因为它触发的案例并不真正有趣或有用。在版本构建中,将变量初始化为类型默认值的用户代码会被编译器优化。在调试版本中,大多数警告都针对用户无法真正处理的生成代码


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

不会出现错误,因为编译器无论如何都会对此进行优化。这只是为了减少代码中的视觉噪音。不会出现错误,因为编译器无论如何都会对此进行优化。这只是为了减少代码中的视觉干扰。我希望编译器能够优化初始化,至少在我初始化字段声明时是这样。不管怎样,我明白了,这主要是精神负担。谢谢似乎警告已从较新的Visual Studio版本中删除:@lex82 Nice find。更新了我的答案。我希望编译器能够优化初始化,至少在我初始化字段声明时是这样。不管怎样,我明白了,这主要是精神负担。谢谢似乎警告已从较新的Visual Studio版本中删除:@lex82 Nice find。更新了我的答案。