2010-02-11 77 views
5

當我需要將值加載到類和結構體中時,我使用Nullable<T>10類型相當多,例如從數據庫加載可爲空的值(如下面的示例)。Casting(int?)null與new int?() - 哪個更好?

考慮這個代碼片段:

public class InfoObject 
{ 
    public int? UserID { get; set; } 
} 

// Load the ID into an SqlInt32 
SqlInt32 userID = reader.GetSqlInt32(reader.GetOrdinal("intUserID")); 

當我需要一個值裝入可空屬性,有時候我這樣做:

infoObject.UserID = userID.IsNull ? (int?)null : userID.Value; 

有時候,我這樣做,而不是:

infoObject.UserID = userID.IsNull ? new int?() : userID.Value; 

雖然他們達到了相同的結果,但我想看看是否有人知道哪個更適合使用(int?)nullnew int?()關於性能,最小IL代碼,最佳實踐等?

通常我一直在贊成上面的代碼的new int?()版本,但我不確定鑄造(int?)null是否比編譯器更快地解析爲new int?()

乾杯!

回答

8

它們將生成相同的IL。使用您發現更容易閱讀的內容。

當你談論一些「編譯器解決更快」的東西時,你是在談論微優化你的構建次?我不知道哪裏會更快,但我懷疑它會爲任何重要的代碼塊帶來可靠的可測量的差異。

我個人使用null只要我可以這樣做,毫不含糊;我想我通常更喜歡演員致電new,但它並沒有真正的區別。

+0

我同意你的意見。 '(int?)null'看起來好於'new int?()',尤其是當在我的示例中顯示的內聯條件語句中使用時。關於你的問題:當你說IL是相同的時候你回答了。構建時間目前不是問題(除非我使用TFSBuild,但這是一個完全不同的故事),所以只要IL匹配,我很高興:) – Codesleuth 2010-02-11 10:26:09

+0

我最喜歡的(與鑄造版本作爲非常接近的第二)是'default(int?)'。 – sblom 2012-12-14 00:47:30

相關問題