繁体   English   中英

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

[英]System.Nullable<T> What is the value of null * int value?

请考虑以下陈述:

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”,在此上下文中至少可以认为与数据库null相同,即不是Nothing,或者Zero,它意味着“未知”。 五批未知仍然是未知的,它也永远不会是“空字符串”,因为你处理数字,而不是字符串。

我不确定你的意思是“如何阻止编译器将其标记为无效操作?” 因为这段代码在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; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM