【问题标题】:Where to put the equality function for a class in a third party library?在第三方库中将类的相等函数放在哪里?
【发布时间】:2011-02-18 18:03:35
【问题描述】:

我正在使用一个第三方库,其中包含一个缺少 operator==() 和 Equals() 的类。我想自己实现一个,但我不知道如何命名它以及放在哪里。我尝试将这两个运算符添加为扩展方法,但都失败了。我现在编写了一个 IsEqualTo() 函数,但它导致客户端代码相当混乱。有谁知道更优雅的解决方案?

【问题讨论】:

    标签: c# equality


    【解决方案1】:

    是否可以选择继承或包装第三方类?

    【讨论】:

    • 嗯,我怀疑它会使客户端代码更清晰,因为我总是必须记住在调用比较函数之前包装实例,就像我现在必须记住调用我自己的 IsEqualTo( ) 函数而不是默认的比较函数。
    • 我的意思是:不要在代码中使用第三方类。始终使用包装器。
    • 确实,这是一个选项,但在与库交互时需要来回转换实例。虽然可行,但会导致大量开销。
    【解决方案2】:

    您将无法重载 == 运算符,但您可以创建一个可用于字典等的 IEqualityComparer<T>

    虽然您可以编写 Equals 扩展方法,但它永远不会被使用,因为 Object 上的虚拟方法将始终适用,如果有适用的实例方法,编译器不会即使有更具体的扩展方法,也不要寻找扩展方法。

    您可能希望将您的 IsEqualTo 方法重命名为 ValueEquals 或类似名称...但我同意这仍然不理想。

    【讨论】:

      猜你喜欢
      • 2011-04-06
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多