2014-09-26 63 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