可能是重复问题:
如何在“==”运算符重载中检查空值而不导致无限递归?
假设我有一个像这样的类型:
public class Effect
{
public static bool operator == ( Effect a, Effect b )
{
return a.Equals ( b );
}
public static bool operator != ( Effect a, Effect b )
{
return !a.Equals ( b );
}
public bool Equals ( Effect effect )
{
return this.TypeID.Equals ( effect.TypeID );
}
public override bool Equals ( object obj )
{
return this.TypeID.Equals ( ( ( Effect ) obj ).TypeID );
}
}
什么是处理空值最健壮和最干净的方法?
我不确定是否需要同时检查当前实例(this)和传递的实例(effect/obj)是否为空?如果当前实例(this)为空,编译器是否仍会调用effect.Equals或Object.Equals?
此外,无论哪种方式,空值检查应该在哪里进行?我假设只在Equals方法内部进行,而不是在等式运算符(==,!=)中进行。
==
和Equals
不是一个好主意。 - H H