【问题标题】:Subtracting a nullable decimal null from value [duplicate]从值中减去可以为空的十进制空值[重复]
【发布时间】:2017-03-02 14:34:54
【问题描述】:

我今天在 C# 中遇到了一个可以为空的小数的奇怪行为。

从某个值中减去一个空值得到空值。

例子:

2300.00 - null = null :(

using System;

public class Program
{
    public static void Main()
    {
        decimal? a=2300.00m;
        decimal? b=null;

        var result=a-b;

        Console.WriteLine("Result is {0}",result);
    }
}

为什么我得到的是 null 而不是 2300?

Fiddle

【问题讨论】:

  • 如果一个值可以为空,你不应该做一个空检查吗?
  • 2300 - ihavenoidea == ihavenoidea,唯一明智的行为。
  • 这类似于一个术语为Double.NaN时的双精度计算
  • 不知道为什么这个问题被否决了,即使它确实有一个相当明显的答案......
  • @MatthewWatson 我猜是因为它是重复的,两秒钟的搜索就会得到答案......

标签: c# .net c#-4.0 decimal nullable


【解决方案1】:

这种行为符合null“未知值”的含义:当你从2300中减去一个未知值时,你会得到一个未知值。

如果您希望 nullable 中的 nulls 被视为为零,请使用 null 合并运算符:

var result=(a ?? 0) - (b ?? 0);

Demo.

【讨论】:

    【解决方案2】:

    Null 不是数字。这是一个未知值。六个苹果减去“一个未知数”等于多少?它等于“未知数量”。

    【讨论】:

      【解决方案3】:

      查看the documentation:

      预定义的一元和二元运算符或任何重载运算符 由值类型 T 支持的也受 对应的可空值类型T?。这些运算符,也称为 提升运算符,如果一个或两个操作数是null,则产生null

      所以,这是设计使然。所有带有 null 的操作都会产生 null 值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 1970-01-01
        • 2013-01-13
        • 2022-01-09
        相关资源
        最近更新 更多