2010-11-01 109 views
14

正如我所瞭解的默認(對象)其中'對象'是任何引用類型總是返回null,但我可以指定默認值是什麼?例如,我想要默認(對象)==新對象();指定參考類型的默認值

+1

不,這是不可能的。你能告訴我們這裏的最終目標,也就是爲什麼你會想要這個功能嗎? – Ani 2010-11-01 02:28:24

+0

不,你爲什麼需要這樣做?如果對象爲空,只需分配一個新的! – 2010-11-01 02:28:59

+1

只是爲了能夠說FirstOrDefault()並且永遠不會得到空值。猜猜我只會寫一個新的擴展方法。 – 2010-11-01 02:30:08

回答

25

default(type)總是返回同樣的事情 - 「零」刪除「該類型的版本。對於引用類型,這是一個始終設置值爲零的對象的句柄 - 相當於null。對於值類型,這總是所有成員設置爲零的結構。

有沒有辦法來覆蓋這種行爲 - 語言規範是這樣設計的。


編輯:關於你的評論:

只是爲了能夠說FirstOrDefault(),從來沒有得到一個空。

我不會在任何情況下推薦這個。用戶期望FirstOrDefault()失敗時返回null。最好是寫自己的擴展方法:

static T FirstOrNewInstance<T>(this IEnumerable<T> sequence) where T : class, new() 
{ 
    return sequence.FirstOrDefault() ?? new T(); 
} 
3

對不起,我不是喬恩斯基特...

但無論如何,答案是「不,你不能」

+6

通常Jon Skeet解釋了爲什麼(或者爲什麼不在這種情況下):) – PostMan 2010-11-01 02:38:53

+0

@PostMan,就像我說過的,我不是Jon Skeet;)。無論如何,我不認爲這裏有任何解釋......這是不可能的。 – 2010-11-01 02:54:02

+0

只要做出來,你會沒事的:)但是,我同意,除了你不能解釋外,沒有任何解釋。 (除了這是一個設計決定) – PostMan 2010-11-01 03:44:24