读书人

能否限定泛型参数必须是enum?泛型参数

发布时间: 2013-09-29 11:07:08 作者: rapoo

能否限定泛型参数必须是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层面上对枚举值的转换处理也只有装箱拆箱动作,完全符合值类型的说法。

读书人网 >C#

热点推荐