对于简单类型(如int),可以使用+、-等运算符来处理值。而对于对应的可空类型,这是没有区别的:包含在可空类型中的值会隐式转换为需要的类型,使用适当的运算符。这也适用于结构和自己提供的运算符。例如:
int? opl =5;
int? result = opl * 2;
注意,其中result变量的类型也是int?。下面的代码不会被编译:
int? opl = 5;
int result = opl * 2;
为使上面的代码正常工作,必须进行显式转换:
int? opl = 5;
int result = (int) opl * 2;
或通过Value属性访问值:
int? opl = 5;
int result = opl.Value * 2;
只要opl有一个值,上面的代码就可以正常运行。如果opl是null,就会生成System.InvalidOperationException 类型的异常。
这就引出了一个很明显的问题:当运算表达式中的一个或两个值是null时,例如,下面代码中的opl,会发生什么情况?
int? opl = null;
int? op2 = 5;
int? result = opl * op2;
答案是:对于除了 bool?外的所有简单可空类型,该操作的结果是null,可以把它解释为“不能计算”。对于结构,可以定义自己的运算符来处理这种情况。对于bool?,为&和丨定义的运算符会得到非空返回值,这些运算符的结果十分符合逻辑,如果不需要知道其中一个操作数的值即可计算出结果,则该操作数是否为null就不重要。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>