[英]C# Enums and Generics
为什么编译器拒绝此代码时出现以下错误? (我使用的是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;
}
}
编译器不能依赖于为T
提供的每种类型实现的运算符==
。 您可以添加一个约束来限制T
到class
,但由于枚举不是引用类型,因此不允许您将它用于枚举。 添加struct
作为约束也不允许使用运算符,因为结构并不总是具有==
运算符的实现,但在这种情况下你可以使用a.Equals(b)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.