2013-07-18 82 views
2

我有某些場景(例如一個自定義類來存放Sql參數),其中可能需要或不需要使用變量。傳統上,我一直定義這些類型爲Guid?,並在使用前使用myGuid.HasValue檢查有效值。我應該使用Guid和Guid.Empty還是可以爲空的Guid?

當然在實踐中,我也可以使用常規的Guid s並使用myGuid == Guid.Empty執行有效值檢查。

爲了便於閱讀,我更喜歡第一個用法,因爲它感覺更乾淨,但是如果有人能建議這些方法之一是更好(更快,更快或者更正確),那麼我將不勝感激。

+0

如果不需要,它將永遠不會被使用? –

+0

不是永遠不會,但例如,具有'Guid'作爲id字段的對象不會填充此字段,直到它已被保存到數據庫。 – 5arx

回答

2

如果參數在T-Sql端可以爲null,那麼我認爲Guid?更適合自然。尤其是在與ADO.NET參數化查詢一起使用時,可以將空值類型轉換爲DBNull.Value,當它們的值爲null時。如果您要使用Guid.Empty來指示null,那麼您需要檢查該條件並明確將DBNull.Value傳遞給您的命令/查詢。例如: -

command.Parameters.AddWithValue("@guid", myNullableGuid)  

command.Parameters.AddWithValue("@guid", 
    myGuid == Guid.Empty ? DBNull.Value : myGuid)  

有兩個選擇之間幾乎沒有性能上的差異,否則。

1

我覺得Guid?的方法好得多。只是巧合的是,默認值Guid等於Guid.Empty沒有實際用途,可以視爲null值。例如,使用intbool默認值與其他值沒有任何區別。 因此,恕我直言,你應該使用Guid?保持一致。

1

我通常使用的聲明像如下:

Guid? objGuidStudent = null; 
objGuidStudent = Students.FindByName('Oscar'); 
Classrooms.Add(x, y, z, objGuidStudent); 

它完美,有或沒有NULL值。

相關問題