什麼是正確的檢查:比較默認還是空的?
Guid value;
// ...
if (value != Guid.Empty)
或
if (value != default(Guid))
我覺得第二,但無法解釋爲什麼。
什麼是正確的檢查:比較默認還是空的?
Guid value;
// ...
if (value != Guid.Empty)
或
if (value != default(Guid))
我覺得第二,但無法解釋爲什麼。
由於Guid.Empty == default(Guid)
它並不重要,但我更喜歡Guid.Empty
的可讀性。
我認爲,從可讀性的角度來看,兩者都很好,這實際上取決於檢查的實際意義。檢查記錄是否處於默認狀態與檢查記錄是否包含空值(IMO)不同。 – James 2013-04-29 13:44:48
我要說的第二個純粹是因爲你必須在未初始化狀態的記錄,因此,它將包含默認值。您正在檢查變量是否處於默認狀態,而不是它是否爲空 - 兩種不同的檢查(IMO)。
Guid.Empty
是相當於default(Guid)
在.NET所以從它並不重要技術點,不過,比較Guid.Empty
給我的印象是,你對一個特定值的檢查,而不是是否該記錄是默認狀態。
Guid.Empty
相當於new Guid()
,這也相當於default(Guid)
。
當你反編譯Guid
結構時,似乎;
public static readonly Guid Empty = new Guid();
由於Guid
是struct
,從Default Values Table;
通過將所有值類型字段設置爲其默認值 值以及將所有引用類型字段設置爲空而生成的值。
由於字段類型Guid
是,short
,int
,byte
,(這類型的默認值是0
),當我們使用default(Guid)
我們得到了所有字段Guid
是0
。
一個只讀的GUID結構,其值是全零的實例。
當我們寫這段代碼;
Console.WriteLine(default(Guid));
Console.WriteLine(new Guid());
輸出;
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
如果你關心的可讀性(我想你應該)Guid.Empty
似乎不如我。
這是我做過的最不必要的解釋':)' – 2013-04-29 13:52:09
兩者都是一樣的!
Guid.Empty
是Guid的只讀字段,其值爲{00000000-0000-0000-0000-000000000000}
。
隨着default(Guid)
編譯創建一個常數值,有{00000000-0000-0000-0000-000000000000}
。
在這兩種情況下,您的值都會與內存中某個值進行比較。
爲了便於閱讀,請使用Guid.Empty
。
當您使用泛型時使用default(T)
。
爲了便於閱讀,我個人會使用Guid.Empty
。我唯一真正使用default
的時間是當沒有其他選項時,例如當檢查KeyValuePair
時。
你應該使用下列內容:
var guidIsEmpty = value == Guid.Empty;
兩者都是技術上正確的,但是,比較Guid.Empty肯定,使更多的可讀代碼。
我知道這是一個古老的線程,但只是想附和:
當定義一個GUID的默認值作爲參數傳遞給一個方法,你將不得不使用默認值(GUID),而不是的Guid .Empty,因爲Guid.Empty不被視爲編譯時常量。
這將編譯:
private void MyMethod(Guid id = default(Guid))
這不會編譯:
private void MyMethod(Guid id = Guid.Empty)
謝謝@Mekuri,但是這並不直接回答這個問題。您的文章作爲評論很棒,但沒有足夠的信息可以成爲SO的答案。 – 2017-12-13 14:30:35
嗯......你有什麼檢查? – Oded 2013-04-29 13:29:28
第二個例子給你'使用未分配的局部變量'值'' – Default 2013-04-29 13:30:02
'default(Guid)== Guid.Empty' – Oded 2013-04-29 13:30:16