c# - 可空结果令人惊讶

标签 c#

什么打印这个程序?

static void Main(string[] args)
{
    int? other = null;
    int value = 100 + other ?? 0;
    Console.WriteLine(value);
}

我知道我脑子里没有语言规范。但是它打印 0 而不是 100 仍然令人惊讶。对于这种奇怪的行为是否有合理的解释?

当我使用大括号时,我得到了正确的结果。

static void Main(string[] args)
{
    int? other = null;
    int value = 100 + (other ?? 0);
    Console.WriteLine(value);
}

最佳答案

当前表达式的计算结果为:

(100 + other) ?? 0;

other的值为null,一个数字加上null还是null。所以表达式输出 0。

在您的第二个示例中,您首先评估 null 检查,然后添加 100。

关于c# - 可空结果令人惊讶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33625941/

相关文章:

c# - oAuth 2.0 API 使用 C#

c# - 如何在 MVC4 中禁用特定操作\ Controller 的全局属性

c# - 为什么覆盖 XML 文件会创建额外的结束标记?

c# - OWIN SelfHost Web Api - 请求取消 - 它是如何完成的?线程中止?

c# - 单程序集多语言 Windows 窗体部署(ILMerge 和附属程序集/本地化) - 可能吗?

c# - 如何每 10 分钟在服务中运行一个函数?

c# - 使用模拟存储库进行单元测试命令类

c# - 在颁发者名称与特定值匹配的集合中查找 X509 证书

c# - 如何在 C# 中将空值设置为 int?

c# - 如何将 C# 函数指针传递给 CLI/C++ 代码?