【发布时间】:2016-04-24 09:43:14
【问题描述】:
我正在查看IEquatable.Equals on MSDN。特别是两个 Equals 运算符的部分:
public override bool Equals(Object obj)
{
if (obj == null)
return false;
Person personObj = obj as Person;
if (personObj == null)
return false;
else
return Equals(personObj);
}
public static bool operator == (Person person1, Person person2)
{
if (((object)person1) == null || ((object)person2) == null)
return Object.Equals(person1, person2);
return person1.Equals(person2);
}
我正在努力解决的问题是:
if (((object)person1) == null || ((object)person2) == null)
return Object.Equals(person1, person2);
- 为什么在检查对象是否为空之前强制转换为对象?是否还有更多内容,或者是否可以像
if ( person1 == null || person2 == null )一样轻松表达? - 为什么要调用 Object.Equals?当然,如果其中一项为空,那么它就是
false?
在我看来,
if (((object)person1) == null || ((object)person2) == null)
return Object.Equals(person1, person2);
只是一种复杂的写作方式:
if ( person1 == null || person2 == null )
return false;
还是我错过了什么?
【问题讨论】:
-
您正在覆盖
==,因此如果您不将其转换为对象,它将调用相同的==并最终导致堆栈溢出异常。 -
另外,如果它们都为null,它应该返回
true,所以如果它们都为null,你不能简单地返回false。 -
@Rob 我认为你应该把你的 cmets 放在一个答案中,这样可以帮助其他人更容易找到他们是否有同样的问题。
-
更改代码,运行它,然后自己找出来。你写这个问题所用的时间会少得多。
-
我实际上就坐在这里,源代码在我旁边,所以是的,我在发布之前确实尝试过。这不是我的第一篇文章。因为某人不理解某事而否决某人的问题,就像在工作小组会议上嘲笑某人犯了错误一样。我相信你的父母为你感到骄傲。
标签: c# iequatable