gpt4 book ai didi

c# - 两个相等的 .NET 对象不会说它们是

转载 作者:可可西里 更新时间:2023-11-01 07:49:25 24 4
gpt4 key购买 nike

我有以下代码:

object val1 = 1;
object val2 = 1;

bool result1 = (val1 == val2);//Equals false
bool result2 = val1.Equals(val2); //Equals true

这是怎么回事?解决此问题的唯一方法是使用 .Equals() 方法吗?

最佳答案

运算符 == 是静态的,不是虚拟的,因此行为由静态类型而不是运行时类型决定。 == 在引用类型对象上的默认 实现是比较引用(尽管类型可以实现不同的行为,例如 string) .您有两个不同的对象,它们没有相同的引用,因此 == 返回 false。

正如您所指出的,解决方案是使用 Equals。 Equals 是一个虚拟方法。因为 value1 有运行时类型 Int32 你最终调用了 Int32.Equals .从 .NET Reflector 可以看出其实现如下:

public override bool Equals(object obj)
{
return ((obj is int) && (this == ((int) obj)));
}

换句话说,它检查参数是否为 int 类型,如果是,则转换它并使用为 int< 定义的 ==/。这将比较整数的

Is the only way to fix this to go with .Equals() method?

另一种方法是将对象转换为 int,然后使用 ==,就像 Int32.Equals 的实现一样。

关于c# - 两个相等的 .NET 对象不会说它们是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3470145/

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