【问题标题】:C# shorthand for Equals() when both args can be null当两个参数都可以为空时,Equals() 的 C# 简写
【发布时间】:2012-04-25 19:50:10
【问题描述】:

一个简单的问题:

我想使用虚拟 Equals() 方法(不是==)比较两个对象。两者都可以为空。

我应该重复这个连串的:

if ((left == null && right == null) || (left != null && left.Equals(right)) {

}

或者对于这种情况有更优雅的成语吗?

【问题讨论】:

    标签: c# null equals


    【解决方案1】:

    是的:

    if (object.Equals(left, right))
    

    甚至没有明显地表明它正在调用静态方法:

    if (Equals(left, right))
    

    (虽然我个人更喜欢额外的清晰度。)

    静态object.Equals 方法没有非常好的文档,但它完全符合您的要求:)

    【讨论】:

    • 我必须查看示例以确保它确实符合我们的要求 :-)
    • 我很好奇,为什么第二个例子还能编译?
    • @KendallFrey:我不明白这个问题。为什么你认为它应该编译?
    • 谢谢,我有点没想到静态object.Equals 会触发多态行为。 :-) BTW 出于好奇,如果它是通用代码并且leftright 是通用参数类型(即可能是结构),这是否也会正确运行?
    • 静态 object.Equals 方法将简单地进行正确的 null 检查,然后使用给定参数调用实例 Equals 方法。静态方法本身不是虚拟的,也不会被任何其他类覆盖。
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    相关资源
    最近更新 更多