我环顾四周,但似乎没有人问过这个问题,所以就这样吧。
我正在开发一个自定义类,它将具有IEquatable
界面,因此我正在制作自己的Equals
方法。它看起来是这样的:
public bool Equals(QueryFilter qfilter)
{
if (qfilter == null)
{
return false;
}
return ((this.Value.Equals(qfilter.Value)) &&
(this.Name.Equals(qfilter.Name)) &&
(this.Order == qfilter.Order));
}
其中 Value、Name 和 Order 是 QueryFilter 类的字段。值和名称是strings
,但订单是一个int
,我想知道是否使用==
运营商很好,或者我是否应该去Int32.Equals
方法,以“匹配”其他字段如何进行比较?我查了MSDN,但没有详细说明,只是说它超载了,但我不确定在这种情况下这意味着什么。那==
会一直在工作吗?
那么总结来说,哪一个更好呢?Int32.Equals
or ==
?我应该什么时候使用每一种?
是的,使用==
运算符绝对没问题,只要编译时类型Order
is int
.
如果编译时类型是object
例如,那么你会处理boxed int
值并将这些框与引用相等进行比较,这不是您所追求的。但只要编译器知道它们是int
价值观,没问题。
请注意,这是also很好做这个Name
and Value
- 再次假设编译时这些属性的类型是string
(因为编译器使用由string
。那么你可以利用这样的事实&&
是短路的,去掉不必要的括号,剩下:
public bool Equals(QueryFilter other)
{
return other != null &&
this.Value == other.Value &&
this.Name == other.Name &&
this.Order == other.Order;
}
...我当然更愿意看到。
这也可以处理以下情况:Value
or Name
is null
,以一种明显的方式(空引用彼此相等,并且不等于任何非空引用)。您现有的代码会抛出一个NullReferenceException
如果达到this.Value.Equals
or this.Name.Equals
对于空属性值。 (您很可能确保永远不会出现这种情况,但值得注意。)
您还应该确保您的哈希码与相等性一致,并覆盖Equals(object)
too.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)