用于比较的通用约束

时间:2013-12-10 08:05:15

标签: c# generics

我有这个不编译的代码

public class MyClass<T>
{
    public bool AreEqual(T a, T b)
    {
        return a == b;
    }
}

错误是

  

运算符'=='不能应用于'T'和'T'类型的操作数

这使得因为T可能是没有实现任何运算符的东西。 无论如何,我需要做些什么来完成这项工作?

我知道我可以重写我的代码以避免==运算符,但这不是问题。

更新

阅读当前的答案后,只是为了让它更清晰。我知道如何重写我的代码,但我想知道的更像是。

是否有一种方法可以让我在我的泛型类中使用==运算符。像public class MyClass<T> where T : ==

这样的东西

2 个答案:

答案 0 :(得分:4)

只需使用Object.Equals方法:

public class MyClass<T>
{
    public bool AreEqual(T a, T b)
    {
        return Object.Equals(a, b);
    }
}

答案 1 :(得分:1)

T应该代表什么?

Docu有助于添加约束 Constraints docu

编辑:澄清我对选民的看法。 using return Equals(a, b); 显然有意义,特别是对于参考类型。 所以Object.Equals可以作为答案。 使用Equals与==非常重要。

但对于选民来说。你考虑过吗?

这将编译:

public class MyClass<T> where T:class 
{
    public bool AreEqual(T a, T b) 
    {
         return a == b;
    }
}

建议某人考虑约束是不对的。这不是他们“需要”知道的。 我不知道海报不好知道Equals(): - )

Another SO post that goes into more detail on == and constraints