2

从历史上讲,我在赋值之前初始化了成员变量,如下所示:

private bool _myBool = false;
private int _myInt = int.MinValue;
private string _myString = String.Empty;

最近我发现自己像这样初始化它们(通常使用原语):

private DateTime _myDateTime = default(DateTime);
private bool _myBool = default(bool);
//etc

这是一个坏习惯还是好习惯?怎么会?

4

5 回答 5

5

我真的看不出这样做有什么意义,因为您添加了实际上什么都不做的额外代码。

如果您尝试默认(类),同样适用,您会得到空值。

于 2013-10-10T17:55:00.540 回答
3

private int _myInt = int.MinValue;并且default(int)是不同的。

这一切都取决于您的要求。如果你希望你的变量有一个值,那么 IMO usingdefault更具可读性和清晰性。

它只对函数的本地变量很重要,对于类字段,它将由编译器完成。

于 2013-10-10T17:57:05.977 回答
3

添加语句来指示编译器无论如何都要做它要做的事情是一种不好的做法(这也适用于bool _myBool = false,尽管程度较轻)。

与必须显式分配的局部变量不同,字段被隐式初始化为其默认值。编译器已经知道这样做,所以附加代码绝对适合编译器。

由于您的代码的唯一其他“消费者”是您的读者,因此问题归结为“期望读者知道类中的字段被初始化为其默认值是否合理?” 我认为答案应该是“是”,因为这是非常基础的知识。

于 2013-10-10T17:58:12.217 回答
2

将字段初始化为 没有任何价值default(T),因为这是由编译器“默认”完成的。

如果变量总是在使用之前设置,那么初始化任何变量的价值就更小了:

public void Foo(){
    DataSet ds = null;
    ds = new DataSet();
}

为什么在设置之前清除它?

于 2013-10-10T17:57:09.057 回答
1

从某种意义上说,它增加了代码读者的认知负担,这是许多人认为有害的做法。如果我看到一个初始化,我希望它能够提供一些真正的意义。关键字的主要用途default是泛型。

于 2013-10-10T18:03:55.647 回答