哪种使用方式更好?
int xyz = 0;
或者
int xyz= default(int)
;
哪种使用方式更好?
int xyz = 0;
或者
int xyz= default(int)
;
int xyz = 0;
为什么要让人们思考得比必要的多?default
在通用代码中很有用,但在这里没什么作用。你还应该考虑是否在正确的位置初始化它,并赋予一个有意义的值。有时候,你会看到像这样的堆栈变量的代码:
int xyz = 0;
if(someCondition)
{
// ...
xyz = 1;
// ...
}
else
{
// ...
xyz = 2;
// ...
}
在这种情况下,您应该延迟初始化,直到您拥有真实的值。请执行以下操作:
int xyz;
if(someCondition)
{
// ...
xyz = 1;
// ...
}
else
{
// ...
xyz = 2;
// ...
}
编译器确保您不使用未初始化的堆栈变量。 在某些情况下,您必须使用无意义的值,因为编译器无法知道代码是否会执行(由于异常、调用 Exit 等)。 这是规则的例外(不是双关语)。
default
运算符的目的是为类型提供默认值,但它主要是为了允许泛型具有其泛型类型参数声明的值的有效值而添加的。default
有一个合法的用途:public T Aggregate<T>(IEnumerable<T> collection, Func<T, T, T> aggregation)
{
T result = default(T);
foreach (T element in collection)
result = aggregation(result, element);
return result;
}
default
,上面的代码需要一些技巧才能编译和正常运行。因此,使用第一个选项,将其设置为0
。你的代码之间没有性能差异。为了更清晰地看到,请使用 int xyz = 0;。
鉴于发出的CIL代码是相同的(您将获得
IL_0001: ldc.i4.0
IL_0002: stloc.0
int xyz = default(int);
这种方式在使用泛型时非常有用,因为它可以让你灵活地获取任何类型的默认值。
int xyz = 0;
另一方面,这种方法简单快捷,但显然不能用于泛型情况。
两种方法都有其优缺点。
祝好!
int xyz = 0 更清晰,defaut通常与泛型一起使用
最好的是
int xyz;
由于无法访问未初始化的变量。