我有一个这样的界面:
public interface IFoo
{
int A {get;}
int B {get;}
}
我有多个实现 IFoo 的类。
我想检查是否相等,而不是基于 ReferenceEquality,但是如果 A 和 B 相同,则两个 IFoo 应该被认为是相等的(实际上我正在检查通过 WCF 发送的键值对的集合,这就是为什么我可以'没有引用平等)。
现在,如果我有:
IFoo first = new FooBar1() { A = 1, B = 1};
IFoo second = new FooBar2() { A = 1, B = 1};
if (first == second) {
//this should return true
}
当前 IFoo
是IEquatable<IFoo>
, 所以 FooBar1 和 FooBar2 覆盖 Equals(IFoo other)
,但这不是 == 上调用的内容。我正在寻找我的代码来替换 a==b
与 a.Equals(b)
无处不在,但这并不好。
我能做什么?
最佳答案
不,你不能。重载 ==
需要您使用的一种类型中的静态方法,而接口(interface)不能包含这些方法。扩展方法也无济于事。所以在接口(interface)上 == 总是使用引用相等。
请注意,如果 a==null,a.Equals(b)
将抛出异常。
关于c# - 我可以在接口(interface)上重载 == 运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5066281/