从历史上讲,我已经在赋值之前初始化了成员变量,如下所示:
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
这是一个坏的还是好的做法?怎么样?
答案 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
关键字的主要用途是使用泛型。