发表日期:2020-02-07 17:17:06文章编辑:025app.com 标签:公司新闻
你的这段代码 其实已经默认了n是int32型。
最后我一直认为可空类型最打的优势是用来解决关系数据库映射的。在你加上之后,你可以看看你现在number是什么类型。应该是null类型而不是int32类型。所以能不赋予null值的不是值类型。
我觉得上面由于错误的论据得到了错误的结论。下面是我对于上面论据错误的看法,如果有不同意见我们可以继续讨论:
1.你通过GetType()和参数传递的特征来说明int?是int32类型,你后面的也提到了 int?类型其实是泛型。当你用int型去初始化泛型的时候,你用GetType得到的当然是int32;
2.int number = new Nullable<int>()这段代码不知道你有没有运行过。这很明显是不能通过编译的。
3.
Int32? n = 5;
Int32 result = ((IComparable) n).CompareTo(5);
Console.WriteLine(result);而且我上面提到的几点问题,如果你赋值为null就会发现都有错误。因为你用int32赋值的时候,这个泛型已经是int32型了。int? number = new Nullable<int>();
number变量的值居然是null。
这是我上面正文写的文字,我没有说被赋值为null的时候,还能通过GetType得到它是Int32类型。任何一个对象,当你把它赋值为null的时候,他就是null。
“而且我上面提到的几点问题,如果你赋值为null就会发现都有错误”
这句话你说的太对了,我们都知道的,呵呵,如果你一个对象是null值,而你偏要访问它的属性、字段或者函数,就会抛出未将对象引用到对象的实例的异常。
可空类型的实例“赋值”为null的时候,其实只是将其HasValue字段赋值为false而已,并不是真正的成为null,因为值类型是不存在null这样一种状态的,而至于“为null”的那种可空类型实例访问其方法时,情况稍复杂,对于像ToString()因为方法重写并不会抛出异常,而调用GetType()则会抛出异常,是因为装箱结果为null引起的。