我希望您能够创建一个整数,并在开始工作之前将其实例化为0。
我首先写的是:
我首先写的是:
int i = default(int);
然后我将其移除以用另一个替换,这个更好。
int i = 0;
我想知道我的选择在迷你迷你性能方面是否是最佳的。 default()函数会增加编译时的指令吗?
不会,它们在编译时就已经解决了,并且生成相同的IL代码。值类型将为0
(或false
如果是布尔型,但仍然是0),引用类型则为null
。
public T GetDefault<T>() { return default(T); }
- 它在编译时无法解析。实际上,我可以使用它与尚不存在的类型一起使用。无论如何,真正的答案是 - 如果这个愚蠢的小改变对你有影响,那么 C# 对于你的需求可能太慢了。 - KobiT
将会被知道/推断出来。 - George DuckettGetDefault
用作已编译程序集的一部分呢?在这种情况下,default(T)
不会再次编译或优化(好吧,JIT会这样做,但那是另一个问题)。 - Kobiint i = 0;
当你想在整数上进行数学运算并且该操作需要从变量具体值为零开始时,将其初始化为字面零是有语义意义的。一个很好的例子是创建索引计数器变量;你希望从零开始计数。
int i = default(int);
当你创建一个带有变量的类时,将其设置为默认值是有意义的,因为你知道这个变量将在后续过程中手动设置。以下是一个示例(尽管可能不实用):
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所说的完全相同。
这些小改变只会影响你实际的编程时间,因此从更广泛的意义上讲,写出default(int)比写0要慢,而你花费的思考时间更长。