能否限定泛型参数必须是enum?泛型参数是enum时,怎么做枚举对象的==操作?
下边的两种比较方式都会提示运算符“==”无法应用于“T”和“T”类型的操作数
加了where T:struct 或 where T:enum也不行(后一种语法就不对)
问题如题。。。
enum MyEnum
{
}
class MyClass<T>
{
T value;
public bool EqualTo(T obj)
{
return (T)value == (T)obj; //error
return value == obj; //error
//强制转换成int也不行,用object.Equals的结果又不是我想要的。。。
}
}
------解决方案--------------------你如果是要避免装箱拆箱,可以使用这个方法:
return Comparer<T>.Default.Compare(value, obj) == 0;
不过个人认为这里面装箱拆箱的性能损失是可以忽略的。
最后吐槽下3楼,基础不够扎实,虽然枚举有个Enum类型是class,但是枚举值本身是值类型,非引用类型,因此限定struct。而事实上IL层面上对枚举值的转换处理也只有装箱拆箱动作,完全符合值类型的说法。