2012-01-25 34 views
2

A recent question here利用非通用代碼default關鍵字我感興趣的:用途及使用「默認」關鍵字的非泛型

StreamReader r = default(StreamReader); 

的目的是什麼服務嗎?這與以下不同:

StreamReader r; 

這兩個語句都定義了r。在下面的「SLaks的回答,他明確了使用default還設置rnull,但可以明確的只是使用null來完成。這是一個風格問題,還是有一些實用的服務?

我已經使用default in generic code(當然,還有in switch statement blocks),但不明白它的用途。

回答

3

它與StreamReader r;不同,它分配變量。 它與(StreamReader r = null;)完全相同。

對於引用類型,default(T)編譯爲null
對於值類型,default(T)編譯爲new T()。的

C#default(T)關鍵字is actually equivalent to VB.Net's Nothing keyword

+0

權。我在其他地方讀到了那麼多。以這種冗長的方式寫'null'的目的是什麼? –

+0

@凱文瑞:沒有。它們編譯相同。 – SLaks

+0

所以,你說這只是一種風格選擇。除了我在其他地方看過,自動生成的代碼模板可能會輸出這樣的代碼,但我會認爲它是在S.O.中手寫的。我鏈接到的問題(我在哪裏看到這個代碼)。任何猜測爲什麼人們會喜歡這種風格?這似乎是一個過於明確的方式來說'空'。 –

4

表達default(T)產生用於類型通用或不是默認值。對於參考類型,它將是null,對於值類型,它將是0初始化。雖然它在泛型代碼中非常有用,但它在常規代碼中仍然可用,如果常常有點冗長。

例如。以下幾組線都是等效的

StreamReader r = null; 
StreamReader r = default(StreamReader); 
var r = default(StreamReader); 

int i = 0; 
int i = default(int); 
var i = default(int); 
+0

與以下SLaks相同的評論 - 你是說這只是一種風格選擇?我在別處看過,自動生成的代碼模板可能會輸出這樣的代碼,但我會認爲它是在S.O.中手寫的。我鏈接到的問題(我在哪裏看到這個代碼)。任何理由爲什麼人會喜歡這樣的風格?這似乎是一個過於明確的方式來說'空'。 –

+0

@KevinP。賴斯當然有一種情況可以選擇,因爲它更通用。但在它的核心,它是一種風格選擇(儘管如此,你永遠不會接受我)。 – JaredPar

0

var r = default(StreamReader); 可能會有一定意義,特別是如果您嘗試開發編碼習慣。 除此之外,唯一的好處,我可以看到,如果是在未來的StreamReader的默認某些時候可能不再是零,這似乎不太可能.....

+0

這不僅僅是不太可能;它將**從未**發生。 – SLaks

+0

這是IT。你永遠不會消耗640k。改變是給出的。 BeSides我暗指愚蠢背後的想法。 –