system.nullable null * int值的值是多少?
-
19-09-2019 - |
题
考虑以下陈述:
int? v1 = null;
int? v2 = 5 * v1;
什么价值是 v2
? (null
还是空字符串?)
如何防止编译器将其标记为无效的操作?我需要遵循自定常处理吗?
解决方案
它是 null
.
C#语言规范3.0(第§7.2.7节:抬起的操作员)
对于二进制运营商
+
-
*
/
%
&
|
^
<<
>>
:如果操作数和结果类型都是不可拆卸的值类型,则存在运算符的提升形式。提起的表格是通过添加一个单一来构建的
?
每个操作数和结果类型的修饰符。 举起的操作员生产null
值如果一个或两个操作数为null
(例外是&
和|
运营商bool?
类型,如§7.10.3中所述)。否则,抬起的操作员拆开操作数,应用基础操作员并包装结果。
如何防止编译器将其标记为无效的操作?我需要遵循自定常处理吗?
这不是无效的操作。它不会引发异常,因此在这种情况下,您无需处理异常。
其他提示
如果您希望编译器预防该操作,请使第二个变量不可拆卸。然后,您将被迫写:
int v2 = 5 * v1.Value;
如果V1为null,这将在运行时间抛出一个例外。
它的价值将是“零”,在这种情况下,至少可以认为与数据库null相同,即而不是什么,而不是零,则表示“未知”。五个未知数仍然未知,当您处理数字而不是字符串时,它也永远不会是“空字符串”。
我不确定您的意思是“如何防止编译器将其标记为无效的操作?”由于此代码编译并在Visual Studio 2008 =)下对我运行良好
我不确定您要做什么,但是如果您希望V2为null,则如果V1为null,则应在使用之前测试V1是否具有值。
int? v2 = v1.HasValue ? 5 * v1.Value : null;
或者
int? v2 = null;
if (v1.HasValue) { v2 = 5 * v1.Value; }
不隶属于 StackOverflow