gpt4 book ai didi

.net - null == null 吗?

转载 作者:行者123 更新时间:2023-12-04 16:17:08 26 4
gpt4 key购买 nike

我有一个类型为 Foo 的对象.
Foo 有一个 Id (int)

a) 下面的代码“好”吗?
b) 如果两者都为空,我应该返回什么?

// overload operator ==
public static bool operator ==(Foo a, Foo b)
{
if (ReferenceEquals(x, y))
{
return true;
}

if (x == null && y == null)
{
return // ???
}

if (x == null || y == null)
{
return false;
}

return x.Id == y.Id; // Ids are the same
}

public static bool Equals(Foo x, Foo y)
{
return x == y;
}

编辑:
c) 应该 等于 方法调用 == 运算符 , 或相反亦然?

最后一个问题
d) 有没有可能 ReferenceEquals(x, y) == true x.Id != y.Id ?

最佳答案

是的
null只不过是值为零的内部指针。所以它正在比较两个具有零值的引用。

事实上object.ReferenceEquals(null, null)因为这个事实总是如此,所以你不需要第二次检查。

if (ReferenceEquals(x, y))
{
return true;
}

if (x == null && y == null) // THIS CHECK IS REDUNDANT!!!
{
return true;
}

最后一点,除非在 上,否则 == 和 Equals 的处理方式相同。盒装值类型 :
        object s1 = 2;
object s2 = 1+1;

Console.WriteLine(s1 == s2);
Console.WriteLine(s1.Equals(s2));

这会产生 falsetrue .

d点: 它是同一个对象,同一个内存空间——如果它们指向对象上的一个字段。

关于.net - null == null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077418/

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