泛型约束进行比较。

18 浏览
0 Comments

泛型约束进行比较。

此问题已在此处有答案:

C#中不能将==运算符应用于泛型类型吗?

我有这段代码,但它无法编译

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

错误信息为:

不能将\"==\"运算符应用于类型\"T\"和\"T\"

这是有道理的,因为T可能是没有实现任何运算符的东西。

不管怎样,我该怎么做才能让它工作呢?

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

更新

阅读当前的答案后,只是为了更清楚。我知道我可以重写我的代码,但我想知道的更多是。

有没有一种方法可以使我在我的泛型类中使用==运算符。类似于public class MyClass where T : ==

admin 更改状态以发布 2023年5月22日
0
0 Comments

T代表什么?

文档帮助添加约束条件
Constraints docu

编辑:为了向投反对票的人澄清我的观点。
using return Equals(a, b);
显然是有意义的,特别是对于引用类型。
因此,Object.Equals是正确的答案。
并且使用Equals与==之间的区别很重要。

但是对于投反对票的人,您有考虑过吗?

这将编译:

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

建议某人考虑约束条件并不是错的,只是他们“需要”知道的不是这个。
我的错,因为我不知道发帖人不知道Equals() 🙂

另一个SO帖子详细介绍了==和约束条件

0
0 Comments

只需使用Object.Equals方法:

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

0