问题描述
为什么 typeof int?
是 Int32
int? x = 1;
Console.WriteLine(x.GetType().Name);
如果可以,那么Nullable.GetUnderlyingType
有什么用?
If it is okay then what's the use of Nullable.GetUnderlyingType
?
推荐答案
调用 GetType()
框你的变量.CLR 有一个特殊规则,Nullable
被装箱到 T
.所以 x.GetType
将返回 Int32
而不是 Nullable
.
Calling GetType()
boxes your variable. The CLR has a special rule that Nullable<T>
gets boxed to T
. So x.GetType
will return Int32
instead of Nullable<Int32>
.
int? x = 1;
x.GetType() //Int32
typeof(int?) //Nullable<Int32>
由于包含 null
的 Nullable
将被装箱为 null
,因此以下将抛出异常:
Since a Nullable
containing null
will be boxed to null
the following will throw an exception:
int? x = null;
x.GetType() //throws NullReferenceException
引用 MSDN on Boxing Nullable Types一个>:
基于可为空类型的对象仅在对象非空时才装箱.如果 HasValue
为 false
,则对象引用被分配给 null
而不是装箱
如果对象不为空——如果HasValue
为true
——然后装箱发生,但只有可空对象所基于的基础类型被装箱.装箱非空的可为空值类型装箱值类型本身,而不是包装值类型的 System.Nullable
.
If the object is non-null -- if HasValue
is true
-- then boxing occurs, but only the underlying type that the nullable object is based on is boxed. Boxing a non-null nullable value type boxes the value type itself, not the System.Nullable<T>
that wraps the value type.
这篇关于如果 typeof(int?) 是 Int32,那么 Nullable.GetUnderlyingType 有什么用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!