我正在创建一个整数,我想在处理之前用0来实例化它。int i = 0和int i = default(int)之间是否存在性能差异?
我写首先
int i = default(int);
然后我删除它与另一种是
int i = 0;
我想知道我的选择是在小型微型表现最好更换。 在编译时default()函数是否会增加指令?
我正在创建一个整数,我想在处理之前用0来实例化它。int i = 0和int i = default(int)之间是否存在性能差异?
我写首先
int i = default(int);
然后我删除它与另一种是
int i = 0;
我想知道我的选择是在小型微型表现最好更换。 在编译时default()函数是否会增加指令?
不,它们在编译时解析并产生相同的IL。值类型将为0
(或false
,如果您有bool,但仍为0),并且引用类型为null
。
马龙的答案在技术上是正确的,但每个选项之间应该有明确的语义差异。
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;
}
唯一真正的区别在于它将使就是编译时间,所以我想,当你按下调试它会比其他毫毫毫毫秒快的一种方式或编译,但作为编译完成后,它与Marlon所说的完全一样
这些小的改动只会影响你的实际编程时间,所以在更广泛的意义上,写出默认值(int)比写入0要慢,你花费更多的时间思考它。
所以'诠释我'应该表现更好?我相信这样的问题甚至不值得提问;这对我来说听起来像是对语言编译器的侮辱 – driushkin
并且超越微优化总是存在纳米优化... –