Nullable.Value
和(<whatEverType>) Nullable
之間是否有區別?據我所知,如果沒有設置值或值本身,兩個方法都返回NULL。cast空值爲ValueType
e.g:
DateTime? date = DateTime.Now;
DateTime now = (DateTime) date;
DateTime now2 = date.Value;
Nullable.Value
和(<whatEverType>) Nullable
之間是否有區別?據我所知,如果沒有設置值或值本身,兩個方法都返回NULL。cast空值爲ValueType
e.g:
DateTime? date = DateTime.Now;
DateTime now = (DateTime) date;
DateTime now2 = date.Value;
不,沒有什麼區別。在沒有設置數值的情況下,您將在兩種情況下獲得InvalidOperationException
。 更重要的是,這裏是內部Nullable<T>
實現轉型操作的:
public static explicit operator T(Nullable<T> value) {
return value.Value;
}
(與ReSharper的反編譯)
所以投操作員使用Value
成員。
Aaaah,謝謝你的回答......我錯過了未設置值時引發的異常。 – HimBromBeere 2014-09-26 10:16:40
不知道是由於內聯還是巧妙,但編譯器在兩種情況下都獲得了「Value」成員。 – IllidanS4 2014-11-04 01:01:13
@ IllidanS4我認爲這是由於內聯。 – 2014-11-04 07:23:29
你能提供編譯代碼嗎? – 2014-09-26 10:10:07
「如果未設置值或值本身,兩種方法都會返回NULL。」不。在未設置值的情況下,它會在兩種情況下引發'InvalidOperationException'。 – 2014-09-26 10:11:59
_「據我所知,兩種方法都返回NULL」_現在你已經提供了編譯代碼,爲什麼你沒有驗證這個語句? – 2014-09-26 10:14:59