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节:提升运算符)
对于二元运算符
+-*/%&|^<<>>:如果操作数和结果类型都是非可空值类型,则存在提升形式的运算符.通过向
?每个操作数和结果类型添加单个修饰符来构造提升形式.如果一个或两个操作数都是提升的运算符,则产生一个null值null(该类型的&和|运算符除外bool?,如第7.10.3节所述).否则,提升的运算符解包操作数,应用基础运算符,并包装结果.
如何防止编译器将其标记为无效操作?我是否需要遵循自定义异常处理?
这不是无效的操作.它不会抛出异常,因此在这种情况下您不需要处理异常.
tva*_*son 11
如果希望编译器阻止该操作,请使第二个变量不可为空.然后你将被迫写:
int v2 = 5 * v1.Value;
Run Code Online (Sandbox Code Playgroud)
如果v1为null,这将在运行时抛出异常.