gpt4 book ai didi

c# - 为什么将 *nullable* 小数与 `0` 进行比较不同于将小数与 `0` 进行比较?

转载 作者:太空狗 更新时间:2023-10-29 20:17:40 25 4
gpt4 key购买 nike

有人可以解释为什么 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;

}
}
}

最佳答案

因为 System.Decimal 暴露了 Equals 的重载可以接受 Decimal 值,您的第二种情况是调用 that 方法(已将 int 参数转换为 decimal 使用 implicit conversion ) 并返回 true。

而在第一种情况下,Nullable正在尽力而为,但只能调用 Object.Equals,这在比较 intdecimal 时会失败。如果您的第一个电话是:

bool result1 = objOrder.PriceNullable.Equals(0M);

您将比较两个 decimal,它现在将返回 true


Nullable 通用Equals 方法既不能调用从intdecimal 的隐式转换,也不能调用重载等于接受 decimal 值。

关于c# - 为什么将 *nullable* 小数与 `0` 进行比较不同于将小数与 `0` 进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12670534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com