位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C# 运算符和可空类型

提问人:刘团圆发布时间:2020-12-07

    对于简单类型(如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就不重要。

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部