在初始化成员变量时使用default关键字是一个坏主意吗?

时间:2013-10-10 17:53:12

标签: c#

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

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

这是一个坏的还是好的做法?怎么样?

5 个答案:

答案 0 :(得分:5)

我真的没有意识到这一点,因为你正在添加真正无效的额外代码。

如果您尝试默认(类),则同样适用,您将获得null。

答案 1 :(得分:3)

private int _myInt = int.MinValue;default(int)不同。

这完全取决于您的要求。如果您希望变量具有值,则使用default的IMO更具可读性和清晰度。

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

答案 2 :(得分:3)

添加语句指示编译器执行它将要执行的操作是一种不好的做法(适用于bool _myBool = false,尽管程度较轻)。

与必须明确指定的本地人不同,字段会隐式初始化为默认值。编译器已经知道这样做了,因此编译器的附加代码肯定是不是

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

答案 3 :(得分:2)

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

如果在使用该变量之前始终设置该变量,则初始化任何变量的价值甚至更低:

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

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

答案 4 :(得分:1)

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