我有一个类型为 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));
这会产生
false
和 true
.d点:否 它是同一个对象,同一个内存空间——如果它们指向对象上的一个字段。
关于.net - null == null 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4077418/