【发布时间】:2012-04-25 19:50:10
【问题描述】:
一个简单的问题:
我想使用虚拟 Equals() 方法(不是==)比较两个对象。两者都可以为空。
我应该重复这个连串的:
if ((left == null && right == null) || (left != null && left.Equals(right)) {
}
或者对于这种情况有更优雅的成语吗?
【问题讨论】:
一个简单的问题:
我想使用虚拟 Equals() 方法(不是==)比较两个对象。两者都可以为空。
我应该重复这个连串的:
if ((left == null && right == null) || (left != null && left.Equals(right)) {
}
或者对于这种情况有更优雅的成语吗?
【问题讨论】:
是的:
if (object.Equals(left, right))
甚至没有明显地表明它正在调用静态方法:
if (Equals(left, right))
(虽然我个人更喜欢额外的清晰度。)
静态object.Equals 方法没有非常好的文档,但它完全符合您的要求:)
【讨论】:
object.Equals 会触发多态行为。 :-) BTW 出于好奇,如果它是通用代码并且left 和right 是通用参数类型(即可能是结构),这是否也会正确运行?
Equals 方法。静态方法本身不是虚拟的,也不会被任何其他类覆盖。