2009-04-29 73 views
0

業務對象正在返回short?數據類型。這段代碼會破壞嗎?

我該如何將這個值變成一個變量?

short? myShort = SomeBusinessObject.UserBlah; 

這是正確的嗎?如果它爲空,它會破壞嗎?

+0

我認爲你需要澄清你認爲可能是空的。許多答案正在對UserBlah返回的內容做出假設。我的猜測(因此我的答案)是,你試圖防止SomeBusinessObject爲空。然而,這是一個猜測,更多的信息會很好。 – 2009-04-29 20:22:30

回答

1

是的,這是正確的。

2

你實際上是否試圖防止SomeBusinessObject爲空?如果是這樣,可爲空的類型將不會幫助你。您仍然需要檢查您的SomeBusinessObject是否爲空。

我假設這是這種情況,因爲如果UserBlah返回一個短,那麼它永遠不會是null(因爲short不是可爲空類型)。

1

myShort如果業務對象返回null將爲null

您不能直接引用myShort作爲值類型,所以這沒問題。

您可以使用myShort.HasValue來查看myShort是否爲null

使用myShort.Value來獲得該值。如果沒有定義值,它會拋出異常。

您可以使用GetValueOrDefault()並傳入默認值以獲取值,即使沒有定義值(null)。如果可空類型爲null,此函數返回您傳入的值。

1

myShort只會爲空,如果UserBlah隱式轉換爲Nullable<Int16>,並將其設置爲null,在這種情況下也不會斷裂,除非您嘗試訪問的myShort.Value成員。

你也可以這樣做:

short defaultValue = 0; 
short myShort  = SomeBusinessObject.UserBlah ?? defaultValue; 
4

這是正確的。您只需如果你分配到myShort一個不可爲空的短,在這種情況下,你必須檢查的HasValue,像這樣擔心:

short s = myShort.HasValue ? myShort.Value : (short) 0; // or some other short value 
+2

GetValueOrDefault() – Nick 2009-04-29 20:21:45

4

爲了得到它變成一個變量使用myShort.Value檢查myShort後.HasValue

2

不要忘了空合併運算符。

short myShort = SomeBusinessObject.UserBlah ?? 0; 

如果SomeBusinessObject.UserBlah爲null,它只是將值傳遞給?所以你可以默認它。