我正在创建一个整数,我希望在使用之前用0实例化它。
我先写了
int i = default(int);
然后我将其删除以替换另一个
int i = 0;
我想知道我的选择是否是迷你迷你表现中最好的。 default()函数会在编译时增加指令吗?
答案 0 :(得分:10)
不,它们在编译时被解析并产生相同的IL。值类型为0
(如果您有bool,则为false
,但仍然为0),引用类型为null
。
答案 1 :(得分:4)
Marlon的答案在技术上是正确的,但每个选项之间应该有明显的语义差异。
int i = 0;
当您想对整数执行数学运算时,初始化为零字符会产生语义意义,并且该操作需要以变量为零的特定值开始。一个很好的例子是创建一个索引计数器变量;你想从零开始算起来。
int i = default(int);
将变量设置为default
值是有意义的,例如,当您创建具有所述变量的类时,您知道变量将在稍后的过程中手动设置。这是一个例子(但它可能是不切实际的):
class IntegerClass
{
private int value;
public IntegerClass(int value)
{
this.value = value;
}
public void Reset()
{
this.value = default(int);
}
}
同样,它们在技术上是相等的(实际上会编译为相同的CIL)但每个都提供不同的语义。
此外,在使用泛型时,可能需要使用default
来初始化变量。
public T SomeOperation<T>()
{
T value = default(T);
this.SomeOtherOperation(ref value);
return T;
}
答案 2 :(得分:1)
它唯一真正的不同之处在于编译时,所以我认为当你按下Debug或Compile时,它会比其他方式快一毫毫磨毫秒,但是一旦编译完成,它将与马龙所说的完全相同
这些微小的变化只会影响你的实际编程时间,因此从更广泛的意义上来说,写出默认值(int)比写0更慢,你把思想投入的时间更长。