作为泛型参数传递时,C#运算符重载不起作用

时间:2018-04-13 21:25:51

标签: c# generics operator-overloading

我将==和!=的运算符添加到一个类中,但是当该类型的对象作为泛型参数传递时,似乎不会调用它们。当我查看反编译代码时,它看起来像(对象)a ==(对象)b。

在这种情况下是否可以使用运算符重载? THX !!

[TestMethod]
public void Test() {
  var a = new OperatorTest(13);
  var b = new OperatorTest(13);

  Assert.IsTrue(a==b);
  TestGenerics<OperatorTest>(a,b);
}

void TestGenerics<T>(T a, T b) where T: class {
  Assert.IsTrue(a == b); //THIS FAILS!
}

class OperatorTest {
  private readonly int _value;

  public OperatorTest(int value) {
    _value = value;
  }

  public static bool operator ==(OperatorTest x, OperatorTest y) {
    return x._value == y._value;
  }

  public static bool operator !=(OperatorTest x, OperatorTest y) {
    return x._value != y._value;
  }
}

0 个答案:

没有答案