gpt4 book ai didi

fxcop - 为什么 FxCop 认为将字段初始化为默认值不好?

转载 作者:行者123 更新时间:2023-12-03 10:59:52 26 4
gpt4 key购买 nike

FxCop 为字段分配默认默认值时(此处为 false 为 bool):

Resolution   : "'Bar.Bar()' initializes field 'Bar.foo' 
of type 'bool' to false. Remove this initialization
because it will be done automatically by the runtime."
现在,我知道该代码为 int a = 0bool ok = false正在引入一些冗余,但对我来说,这似乎是一种非常非常好的代码实践,在我看来,我的老师们坚持这样做是正确的。
不仅性能损失很小,更重要的是:依赖默认值就是依赖每个程序员使用一段代码的知识,依赖于默认值附带的每种数据类型。 (约会时间?)
说真的,我认为这很奇怪:应该保护您避免犯所有太明显错误的程序,在这里建议制作一个,只是为了提高性能? (我们在这里谈论的是初始化代码,只执行一次!非常关心的程序员当然可以省略初始化(并且可能应该使用 C 或汇编程序 :-) )。
FxCop 在这里犯了一个明显的错误,还是有更多错误?

Two updates :

  1. This is not just my opinion, but what I have been taught at university(Belgium). Not that I like to use anargumentum ad verecundiam, butjust to show that it isn't just myopinion. And concerning that:

  2. My apologies, I just found this one:

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

最佳答案

在某些情况下,这可能会带来显着的性能优势。详情请see this CodeProject article.

主要问题是它在 C# 中是不必要的。在 C++ 中,事情是不同的,所以很多教授都教你应该总是初始化。对象的初始化方式在 .NET 中发生了变化。

在 .NET 中,对象总是在构造时被初始化。如果添加初始值设定项,则可能(典型)导致变量的双重初始化。无论您是在构造函数中还是内联中初始化它们,都会发生这种情况。

此外,由于在 .NET 中不需要初始化(它总是发生,即使您没有明确说要初始化为默认值),添加初始化程序表明,从可读性的角度来看,您正在尝试添加具有功能。每一段代码都应该有一个目的,或者在不必要的时候删除。 “额外”的代码,即使它是无害的,也表明它存在是有原因的,这会降低可维护性。

关于fxcop - 为什么 FxCop 认为将字段初始化为默认值不好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/730967/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com