Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 第三方库中类的相等函数放在哪里?_C#_Equality - Fatal编程技术网

C# 第三方库中类的相等函数放在哪里?

C# 第三方库中类的相等函数放在哪里?,c#,equality,C#,Equality,我正在使用一个第三方库,其中包含一个同时缺少运算符==()和Equals()的类。我想自己实现一个,但我不知道如何命名它以及放在哪里。我尝试添加这两个操作符作为扩展方法,但都失败了。我现在编写了一个IsEqualTo()函数,但它会导致相当混乱的客户端代码。有人知道更优雅的解决方案吗 是否可以从第三方类继承或包装该类?您将无法重载==运算符,但您可以创建一个IEqualityComparer,该运算符可用于字典等 虽然您可以编写一个Equals扩展方法,但它永远不会被使用,因为Object上的虚

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

是否可以从第三方类继承或包装该类?

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

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


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

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