我正在創建一個整數,我想在處理之前用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
並且超越微優化總是存在納米優化... –