int i = 0和int i = default(int)之间是否存在性能差异?

时间:2011-07-13 06:27:52

标签: c# .net c#-4.0

我正在创建一个整数,我希望在使用之前用0实例化它。

我先写了

int i = default(int);

然后我将其删除以替换另一个

int i = 0;

我想知道我的选择是否是迷你迷你表现中最好的。 default()函数会在编译时增加指令吗?

3 个答案:

答案 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更慢,你把思想投入的时间更长。