【发布时间】:2011-06-19 13:39:04
【问题描述】:
可能重复:
How do I check for nulls in an ‘==’ operator overload without infinite recursion?
假设我有这样的类型:
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) 为 null,编译器还会调用 effect.Equals 还是 Object.Equals?
同样,空值检查应该在哪里进行?我假设只在 Equals 方法中,而不是在相等运算符 (==, !=)。
【问题讨论】:
-
将两个对象的相等替换为它们的属性相等真的是个好主意吗?我可以看到使用结构,但覆盖 == 类似乎是模糊错误的滋生者。
-
@djacobson,谢谢,那里的答案看起来不错。
-
@liho1eye, @Joan:MS 有一个指导方针,对于 mutable 类型重载
==和Equals不是一个好主意。 -
@liho1eye : string 是一个引用类型(和一个集合)。基于价值的平等适用于它。
-
@Henk Holterman,字符串也是不可变的:)
标签: c# .net operator-overloading equality