nullable的意思是:允许空值;值类型;可空类型。
可空类型也是值类型,但它是包含null值的值类型:int?nullable=null;int?就是可空的int类型。很明显,这又是一个语法糖,肯定不会存在int?这样的类型。对于编译器而言,int?会被编译成Nullable<int>类型,即可空类型。
如果把一个没有值的可空类型装箱之后再拆箱,不能拆箱为非可空类型的值类型,否则会抛出NullReferenceException异常。因为没有值的可空类型装箱后obj等于null,即引用一个空地址。
当把一个可空类型赋给引用类型变量时,CLR会对可空类型(Nullable<T>)对象进行装箱处理。CLR首先检测可空类型是否为null。如果有null,CLR将不会进行实际的装箱操作(因为null可以直接赋值给一个引用类型变量)。
如果不为null,CLR则从可空类型对象中获取值,并对该值进行装箱(即值类型的装箱过程)。当把一个已装箱的值类型赋值给可空类型变量时,CLR会对已装箱的值类型进行拆箱处理。如果已装箱值类型的引用为null,则CLR会把可空类型也设为null。
可空类型的运行结果:
1、通过GetType方法来获得赋值的可空类型时,返回的将是赋值的类型,在前面的的代码中即是System.Int32,而不是System.Nullable<System.Int32>类型。
2、对已赋值的可空类型装箱后,如果使用GetType函数去获得装箱后的引用类型,输出的将仍然是赋值的类型,在前面的代码中即为System.Int32。
3、还有一点必须要注意:没有值的可空类型在调用GetType函数之前,编译器会对可空类型进行装箱操作,使其变为null,即空引用。所以之后再调用GetType函数时,就会抛出空引用异常了。
文章分享结束,nullable和nullable是什么意思的答案你都知道了吗?欢迎再次光临本站哦!