C#中的可空类型
一、可空类型(nullable type)表示在值类型的正常取值范围内再加上一个null值,声明一个可空类型的标准语句如下:
t? mynullablenum = rangednum/new t?() or null; //其中t需要为值类型
例如,声明一个可空整数类型并赋值为null:
int? mynullableint = null; //或使用为new int?()
1.可空类型是泛型结构nullable<t>的实例,其声明为:public struct nullable<t> where t : struct,语法t?是nullable<t>的简写形式,这两种形式是等效的:
nullable<int> mynullableint = new nullable<int>();
※根据声明可以看出,其基础类型t可以是包括struct和enum在内的任何值类型,不能是引用类型,也不能是可空类型,即可空类型不能嵌套使用;可空类型依然是值类型,且为结构类型;
※直接将普通类型或null赋值给可空类型是隐式转换的结果;
二、可空类型包含以下实例成员:
1.hasvalue:只读属性,判断是否有值,如果当前值非空,返回true,否则返回false
2.value:只读属性,如果当前值非空,可以正常访问,否则说明value不包含有意义的值,此时访问value时会抛出异常invalidoperationexception
3.getvalueordefault():实例方法,如果当前值非空(hasvalue为true),返回vlaue的值,否则返回t类型的默认值(即私有字段value的默认值)
4.getvalueordefault (t defaultvalue):实例方法,如果当前值非空(hasvalue为false),返回vlaue的值,否则返回默认值defaultvalue
三、如果将可空类型转换为其基础类型,需要使用强制转换或其value属性获取:
int myint = (int)mynullableint; int myint = mynullableint.value; //以上两种方式,在可空类型实例为null时会抛出异常,可以使用以下方式代替 int myint = mynullableint.getvalueordefault(); //其重载方法可以传入默认值
四、可空类型可以使用其基础类型中自定义的运算符重载和类型转换,如果操作数不包含null,则运算结果与其基础类型的运算结果一致,如果操作数包含null,则运算结果为null,在运算过程中,实际上是调用的可空类型的实例方法getvalueordefault()参与运算:
int? mynullableint = 100; int? mynum = mynullableint + 200;
五、对可空类型使用比较运算符时,如果其中一个可空类型的值为null,而另一个为非null,则除!=(不等于)外,所有比较的计算结果均为false,所以并不是某个比较返回false,其相反的情况一定会返回true;
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的认可是我写作的最大动力!
作者:minotauros
出处:
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
上一篇: 运营日常:质量建立品牌