标签:style blog http color os 使用 io strong ar
可空类型是System.Nullable结构体的实列。一个可空类型代表了相应值类型的正确范围附加null值。这么说来,其实也不是很明子,命题嘛,一般不求易懂,但求准确。
那我就来说说这可空类型吧,上次说到了值类型与引用类型,其中就说到了,值类型是不能为空的,int i=null是错的,值类型为能为空,但我们有时候需要让值类型也可以为空,怎么办呢,那就在值类型的值的范围上扩充一个null值。
我们在日常开发中,什么地方需要让值类型也变成可空呢?如果你有试过把数据库内的数据对象化的时候,面对数据库中的字段定义如:
要转化成对象
这时候就出现问题了,在数据库中是允许为空的,但是在类设计的时候,int类型就是不允许为空的,你不给它赋值,它也是有默认值0的。怎么办?这与数据库的设计是有冲突的,于是,就必须使用咱们的可空类型,我个人理解这也就是为什么要有可空类型的原因。
使用可空类型,上面的类就可以写成
没看错,就是在int后面加上?号,这就是可空类型的表示,当然还有其它的表示方式
这两种表示方式其实是等效的,就根据喜好和使用场景灵活使用就行。
那怎么做呢,最简单的办法就是
这时result的值为0;
或者也可以判断是否为空,对它进行赋值
如果可空类型是经过运算给值类型赋值。那就还有一种办法
即使用??进行转意。这是的result的值为1;
查询变量的值时,我们会发现
propertyInfo.PropertyType.Name | Nullable`1 |
propertyInfo.PropertyType.IsGenericType | true |
propertyInfo.PropertyType.IsGenericTypeDefinition | false |
propertyInfo.PropertyType.GetGenericTypeDefinition().Name | Nullable`1 |
我们根本无法使用一般泛型得到泛型基类型的方法GetGenericTypeDefinition()得到可空类型的基类型,此时,我们就需要使用GetGenericArguments()去得到泛型的基础类型。
做到这里,我们就可以使用反射来完成任何我们想要的操作了。
标签:style blog http color os 使用 io strong ar
原文地址:http://www.cnblogs.com/wolfocme110/p/3939405.html