gpt4 book ai didi

c# - MSDN 提供的 Equals 覆盖中的奇怪转换

转载 作者:太空狗 更新时间:2023-10-29 22:15:51 26 4
gpt4 key购买 nike

我正在看来自 MSDN 的文章 Guidelines for Overloading Equals() and Operator ==

我看到了下面的代码

public override bool Equals(object obj)
{
// If parameter is null return false.
if (obj == null)
{
return false;
}

// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if ((System.Object)p == null)
{
return false;
}

// Return true if the fields match:
return (x == p.x) && (y == p.y);
}

奇怪的是在第二个 if 中转换为 object

// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if ((object)p == null)
{
return false;
}

为什么 p 再次转换为 object?写这个还不够吗

// If parameter cannot be cast to Point return false.
TwoDPoint p = obj as TwoDPoint;
if (p == null)
{
return false;
}

如果 p 不能转换为 TwoDPoint,那么它的值将为空。我很困惑,可能我不明白一些琐碎的事情......

编辑

在另一个 Equals 方法中还有一个这样的转换

public bool Equals(TwoDPoint p)
{
// If parameter is null return false:
if ((object)p == null)
{
return false;
}
}

再次检查 if(p == null)

就足够了

最佳答案

(object)p == null 使用内置的 == 运算符,在这种情况下检查引用是否相等。 p == null 将为指定类型调用重载的 operator==。如果重载的 operator== 将根据 Equals 实现(在您链接到的示例中不是),那么您将有无限递归。即使它不是根据 Equals 实现的,它仍然会做比需要做的更多的事情。

关于c# - MSDN 提供的 Equals 覆盖中的奇怪转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32796404/

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