从值中减去可为空的十进制null

时间:2017-03-02 14:34:55

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

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

从某个值中减去空值会得到null。

示例:

  

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

3 个答案:

答案 0 :(得分:4)

此行为符合null"未知值"的含义:当您从2300中减去未知值时,您将获得未知值。

如果您希望将可空值中的null视为零,请使用null coalesce运算符:

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

Demo.

答案 1 :(得分:2)

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

答案 2 :(得分:1)

检查MSDN

  

预定义的一元和二元运算符以及任何用户定义的   存在于值类型的运算符也可以由nullable使用   类型。如果操作数为null,则这些运算符产生空值;

所以,这是设计的。所有null操作都将产生空值。