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

本文关键字:一个 变量 成员 关键字 默认 初始化 | 更新日期: 2023-09-27 18:34:52

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

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

这是坏做法还是好做法? 怎么来了?

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

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

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

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

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

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

添加

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

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

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

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

如果初始化任何变量的值总是在使用

之前设置,则值会更小:

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

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

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