[英]Which one is better to use and why in c#
哪一個更好用?
int xyz = 0;
要么
int xyz= default(int)
;
int xyz = 0;
為什么讓人們認為不僅僅是必要的? default
對於通用代碼很有用,但在這里它不會添加任何內容。 您還應該考慮是否在正確的位置初始化它,並且具有有意義的值。 有時您會看到堆棧變量,代碼如下:
int xyz = 0;
if(someCondition)
{
// ...
xyz = 1;
// ...
}
else
{
// ...
xyz = 2;
// ...
}
在這種情況下,您應該延遲初始化,直到獲得實際值。 做:
int xyz;
if(someCondition)
{
// ...
xyz = 1;
// ...
}
else
{
// ...
xyz = 2;
// ...
}
編譯器確保您不使用未初始化的堆棧變量。 在某些情況下,您必須使用無意義的值,因為編譯器無法知道代碼將永遠不會執行(由於異常,調用Exit等)。 這是規則的例外(沒有雙關語)。
default
運算符的目的是為您提供類型的默認值,但主要是為了允許泛型為聲明為泛型類型參數的值賦予有效值。
我沒有確鑿的證據,但我懷疑編譯器會在您的特定情況下為兩者發出相同的代碼。
但是,這里有合法使用的default
:
public T Aggregate<T>(IEnumerable<T> collection, Func<T, T, T> aggregation)
{
T result = default(T);
foreach (T element in collection)
result = aggregation(result, element);
return result;
}
沒有default
,上面的代碼需要一些黑客才能編譯和正常運行。
所以使用第一個,將其設置為0
。
您的代碼之間沒有性能差異。 看清楚使用int xyz = 0;
鑒於發出的CIL是相同的(你得到
IL_0001: ldc.i4.0
IL_0002: stloc.0
在這兩種情況下),規則是選擇您認為更好地傳達代碼意圖的那個。 通常,感覺問題是主觀的,難以決定的; 然而,在這種情況下,如果我是代碼審查員,我必須提出一個極其令人信服的理由來接受第一眼看上去完全是多余的default()
。
int xyz = default(int); 在使用Generics bcoz時,我喜歡這種方式,它可以讓您靈活地獲得您正在使用的任何類型的默認值。
int xyz = 0; 另一方面,這很容易和快速,顯然在一般情況下不起作用。
兩者都有其優點和缺點..
問候,
int xyz = 0更清楚,defaut通常用於泛型
最好的是
int xyz;
因為您無法訪問未初始化的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.