Yaq*_*mad 7 c# nullable equality
有人可以解释为什么result1是false和result2是true?代码如下:
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)
因为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方法可以调用既不从隐式转换int到decimal,也没有平等的,它接受一个过载decimal的值.