C#枚举和泛型

Fra*_*fer 9 c# generics enums

为什么编译器拒绝此代码并出现以下错误?(我用VS 2017C# 7.3启用。)

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

public class GenericTest<T> where T : Enum
{
    public bool Compare(T a, T b)
    {
        return a == b;
    }
}
Run Code Online (Sandbox Code Playgroud)

没有泛型的版本当然是完全有效的。

public enum A { ONE, TWO, THREE };

public class Test
{
    public bool Compare(A a, A b)
    {
        return a == b;
    }
}
Run Code Online (Sandbox Code Playgroud)

小智 7

编译器不能依靠==所提供的每种类型所实现的运算符T。您可以添加一个约束以限制Tclass,但是由于该枚举不是引用类型,因此不允许您将其用于枚举。添加struct为约束也将不允许您使用运算符,因为结构并不总是具有该==运算符的实现,但是您可以a.Equals(b)在这种情况下使用。