显式声明默认字段值是不好的做法吗?

时间:2009-03-16 17:50:34

标签: c# resharper

重复问题:

  

Should I always/ever/never initialize object fields to default values?





环境:Visual Studio 2008 w / Resharper 4.1 w / 32bit .NET Framework 3.5

Resharper报告

  

默认值初始化字段是多余的

alt text

明确声明默认字段值是不好的做法?
我发现明确声明默认值更具可读性。

顺便说一下,这不是这个问题的重复 Are default parameters bad practice in OOP?

[更新] 对于那些想知道在哪里更改Resharper 4.1设置以将警告更改为提示/建议的人;更改以下设置 alt text

将更改Visual Studio 2008
alt text

7 个答案:

答案 0 :(得分:10)

这是多余的,但我会保持一致。如果您始终初始化字段,请不管类型如何都保持这种方式。另外,正如您在评论中指出的那样,需要考虑某些类型的默认值会分散注意力,这是另一个首先初始化的原因。

答案 1 :(得分:7)

如果你发现它更具可读性,那很好。我不认为它会影响JITted代码 - 即使它确实如此,性能也绝对不会很小。

如果ReSharper在发出此警告时让您烦恼,请将其配置为不将其视为问题。我没有在这台机器上使用ReSharper,但我认为找到相关选项相当容易 - 如果你不能,请告诉我,当我在合适的机器上时,我会寻找它。

答案 2 :(得分:2)

答案 3 :(得分:0)

我会说明确定义字段是的不良做法。不应将未初始化的字段假定为默认值,应将其假定为“null”。在这种情况下,您希望它显式为0,因此您应该将其声明为0。

Resharper是一种非常严格的编码风格,你不应该盲目地听它,特别是如果它损害你的代码的可读性。

此外,如果有人需要将其移植到另一种语言(默认值可能是未定义的,而不是“0”),那么它将导致未初始化的变量编译器错误,或者甚至更糟的是运行时错误。

答案 4 :(得分:0)

如果它完全像Java(在手机上......很难查找),那么显式初始化就意味着你不能将该字段标记为final(可能是C#中的const),这使得更难以正确地制作一个不可用的类。

答案 5 :(得分:0)

一般答案就像其他人所说,如果对你和你的团队更有意义,那么将Reshaper设置重置为提示。 C#会将所有值初始化为其默认值(对于数字为0,对于引用类型为null),这相当于.NET 2.0默认运算符:

int i = default(int);

编辑:您不会在代码中使用上述内容。它相当于'i = 0',但它的可读性要低得多。我只用它来说明关于unnassigned变量用默认值初始化的观点。

答案 6 :(得分:0)

我想这是一个品味问题,但正如我在其他地方所说的那样,我不喜欢冗余。

离开字段的初始化程序可能意味着编码器知道它会被初始化为默认值,或者他知道它不会被初始化并且不关心,或者他没有考虑它和他的代码恰好工作。我们应该说,后两者是“教育机会”。

另一方面,将字段初始化为默认值会告诉我编码器不理解平台,或者不信任平台。

从不使用默认值的情况如何?从所有构造函数初始化字段的情况,或者在读取之前始终设置字段的情况?在这些情况下,设置为默认值并不表示意图 - 仅表示遵循无意义的规则。