2014-09-26 56 views
1

Nullable.Value(<whatEverType>) Nullable之間是否有區別?據我所知,如果沒有設置值或值本身,兩個方法都返回NULL。cast空值爲ValueType

e.g:

DateTime? date = DateTime.Now; 
DateTime now = (DateTime) date; 
DateTime now2 = date.Value; 
+0

你能提供編譯代碼嗎? – 2014-09-26 10:10:07

+2

「如果未設置值或值本身,兩種方法都會返回NULL。」不。在未設置值的情況下,它會在兩種情況下引發'InvalidOperationException'。 – 2014-09-26 10:11:59

+0

_「據我所知,兩種方法都返回NULL」_現在你已經提供了編譯代碼,爲什麼你沒有驗證這個語句? – 2014-09-26 10:14:59

回答

7

不,沒有什麼區別。在沒有設置數值的情況下,您將在兩種情況下獲得InvalidOperationException。 更重要的是,這裏是內部Nullable<T>實現轉型操作的:

public static explicit operator T(Nullable<T> value) { 
    return value.Value; 
} 

(與ReSharper的反編譯)

所以投操作員使用Value成員。

+0

Aaaah,謝謝你的回答......我錯過了未設置值時引發的異常。 – HimBromBeere 2014-09-26 10:16:40

+0

不知道是由於內聯還是巧妙,但編譯器在兩種情況下都獲得了「Value」成員。 – IllidanS4 2014-11-04 01:01:13

+0

@ IllidanS4我認爲這是由於內聯。 – 2014-11-04 07:23:29