【发布时间】:2011-02-18 18:03:35
【问题描述】:
我正在使用一个第三方库,其中包含一个缺少 operator==() 和 Equals() 的类。我想自己实现一个,但我不知道如何命名它以及放在哪里。我尝试将这两个运算符添加为扩展方法,但都失败了。我现在编写了一个 IsEqualTo() 函数,但它导致客户端代码相当混乱。有谁知道更优雅的解决方案?
【问题讨论】:
我正在使用一个第三方库,其中包含一个缺少 operator==() 和 Equals() 的类。我想自己实现一个,但我不知道如何命名它以及放在哪里。我尝试将这两个运算符添加为扩展方法,但都失败了。我现在编写了一个 IsEqualTo() 函数,但它导致客户端代码相当混乱。有谁知道更优雅的解决方案?
【问题讨论】:
是否可以选择继承或包装第三方类?
【讨论】:
您将无法重载 == 运算符,但您可以创建一个可用于字典等的 IEqualityComparer<T>。
虽然您可以编写 Equals 扩展方法,但它永远不会被使用,因为 Object 上的虚拟方法将始终适用,如果有适用的实例方法,编译器不会即使有更具体的扩展方法,也不要寻找扩展方法。
您可能希望将您的 IsEqualTo 方法重命名为 ValueEquals 或类似名称...但我同意这仍然不理想。
【讨论】: