有人可以解释为什么 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;
}
}
}
最佳答案
因为 System.Decimal
暴露了 Equals
的重载可以接受 Decimal
值,您的第二种情况是调用 that 方法(已将 int
参数转换为 decimal
使用 implicit conversion ) 并返回 true。
而在第一种情况下,Nullable
正在尽力而为,但只能调用 Object.Equals
,这在比较 int
和 decimal
时会失败。如果您的第一个电话是:
bool result1 = objOrder.PriceNullable.Equals(0M);
您将比较两个 decimal
,它现在将返回 true
。
Nullable
通用Equals
方法既不能调用从int
到decimal
的隐式转换,也不能调用重载等于接受 decimal
值。
关于c# - 为什么将 *nullable* 小数与 `0` 进行比较不同于将小数与 `0` 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670534/