为什么将*nullable*decimal与`0'进行比较与将decimal与'0'进行比较不同?

Yaq*_*mad 7 c# nullable equality

有人可以解释为什么result1falseresult2true?代码如下:

namespace TestCsharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Order objOrder = new Order(0.0M);

            bool result1 = objOrder.PriceNullable.Equals(0);//returns false
            bool result2 = objOrder.PriceNullable.Value.Equals(0);// returns true
        }
    }

    public class Order
    {
        public decimal? PriceNullable { get; set; }
        public Order(decimal? priceNullable)
        {
            PriceNullable = priceNullable;

        }
    }
}   
Run Code Online (Sandbox Code Playgroud)

Dam*_*ver 5

因为System.Decimal暴露了一个Equals可以接受Decimal值的重载,而你的第二种情况是调用方法(将int参数转换为decimal使用隐式转换的参数)并返回true.

而在第一种情况下,Nullable它正在尽力而为,但只能Object.Equals在a int和a 之间进行比较时调用哪些将失败decimal.如果你的第一个电话是:

bool result1 = objOrder.PriceNullable.Equals(0M);
Run Code Online (Sandbox Code Playgroud)

你要比较两个decimal,它现在将返回true.


Nullable通用Equals方法可以调用既不从隐式转换intdecimal,也没有平等的,它接受一个过载decimal的值.