我有这个不编译的代码
public class MyClass<T>
{
public bool AreEqual(T a, T b)
{
return a == b;
}
}
错误是
运算符'=='不能应用于'T'和'T'类型的操作数
这使得因为T可能是没有实现任何运算符的东西。 无论如何,我需要做些什么来完成这项工作?
我知道我可以重写我的代码以避免==
运算符,但这不是问题。
更新
阅读当前的答案后,只是为了让它更清晰。我知道如何重写我的代码,但我想知道的更像是。
是否有一种方法可以让我在我的泛型类中使用==
运算符。像public class MyClass<T> where T : ==
答案 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