在c#中使用默认值(..)和文字值声明变量
本文关键字:文字 声明 变量 默认值 | 更新日期: 2023-09-27 18:15:44
在我上一份工作中,我的经理告诉我他读过微软关于变量声明的最佳实践指南。
例如,我想声明一个int、一个string和一个泛型类型,它们的默认值:
int intValue = 0;
string stringValue = null;
T genericValue = default(T);
上面的例子说明了所有变量都被显式地(和字面上)初始化为默认值,除了泛型类型;这里我们使用default(T)
将成员隐式初始化为它的默认值。
我的经理提出的论点是,所有的变量,即使在我们用默认值初始化它们的情况下,应该用default(...);
int intValue = default(int);
string stringValue = default(string);
T genericValue = default(T);
在某些方面,我可以理解为什么这种方法可能是有利的,因为变量的声明和初始化是一致的。
我想知道是否有人知道我的经理声明的合法性,在这方面,如果你能给我指出微软的。net和c#最佳实践文档中的指导方向
我得说你的代码比你经理建议的更可读。编写所有人都可读的代码。我也没有从微软那里得到这样的指导方针(如果有的话,有人可以引用它)。
为了便于论证,请考虑以下代码片段:您有多确定它的默认值是什么?
SomeCustomType something = default(SomeCustomType);
null
?还是new SomeCustomType
?不,你不能说,除非你知道它是struct
还是class
。为了知道这一点,您需要导航到类型的定义(如果没有源代码,则导航到元数据)。考虑有10多个这样的领域。它变得乏味。所以直接告诉你代码的读者,SomeCustomType something = null;
是一个引用类型(忽略可空类型,我们可以很容易地找到它,它将有?
后缀)。相信我,你代码的读者会很高兴的。
当我们开始讨论实例或静态字段时,所有这些参数都开始失效。因为它是冗余的,CLR为您做了这些。你不需要。有趣的是,如果针对。net 1.1编译程序,初始化字段会导致性能损失。
我不喜欢你经理的建议。对我来说,将int
初始化为0而不是default(int)
是很清楚的。
但是,如果我需要使用您的经理建议,我更喜欢使用var
而不是声明类型:
var index = default(int);
var ordersPerCustomer = default(Dictionary<string, Order>);
这减少了代码中的"噪音",因为类型在default
中明确规定了。
我总是听到default(T)
关键字用于泛型类型,当它是未知的var将指向一个值类型或引用。我认为它相当于右边的var
关键字,但主要用于通用模板。
来源:http://msdn.microsoft.com/en-us/library/xwth0h0d (v = vs.110) . aspx
编辑:请参阅这个相关的线程与默认(类型)关键字的一般描述:"默认"关键字在c#中的用途是什么?