【发布时间】:2019-08-02 07:02:44
【问题描述】:
为什么编译器会拒绝此代码并出现以下错误? (我使用 VS 2017 并启用了 C# 7.3。)
CS0019 运算符“==”不能应用于“T”和“T”类型的操作数
public class GenericTest<T> where T : Enum
{
public bool Compare(T a, T b)
{
return a == b;
}
}
没有泛型的版本当然是完全有效的。
public enum A { ONE, TWO, THREE };
public class Test
{
public bool Compare(A a, A b)
{
return a == b;
}
}
【问题讨论】:
-
return a.Equals(b);? -
有趣。
class、MyClass、delegate、Type没有这个限制,struct、enum、unmanaged、IMyInterface有。换句话说,只有当编译器可以确定它是引用类型时才允许。 -
@DmitryBychenko:这可行,但我不明白为什么。
-
@AnuViswan:不同之处在于,在我的示例中,编译器应该知道它是一个枚举,因此应该具有可比性。