System.Nullable <T> null*int值的值是多少?

use*_*677 4 c# null nullable operators lifted-operators

请考虑以下陈述:

int? v1 = null;

int? v2 = 5 * v1;
Run Code Online (Sandbox Code Playgroud)

有什么价值 v2?(null或空字符串?)

如何防止编译器将其标记为无效操作?我是否需要遵循自定义异常处理?

Meh*_*ari 19

是的null.

C#语言规范3.0(第7.2.7节:提升运算符)

对于二元运算符+ - * / % & | ^ << >>:

如果操作数和结果类型都是非可空值类型,则存在提升形式的运算符.通过向?每个操作数和结果类型添加单个修饰符来构造提升形式.如果一个或两个操作数都是提升的运算符,则产生一个nullnull(该类型的&|运算符除外bool?,如第7.10.3节所述).否则,提升的运算符解包操作数,应用基础运算符,并包装结果.


如何防止编译器将其标记为无效操作?我是否需要遵循自定义异常处理?

这不是无效的操作.它不会抛出异常,因此在这种情况下您不需要处理异常.


tva*_*son 11

如果希望编译器阻止该操作,请使第二个变量不可为空.然后你将被迫写:

int v2 = 5 * v1.Value;
Run Code Online (Sandbox Code Playgroud)

如果v1为null,这将在运行时抛出异常.