我刚刚从c中的Generics
开始,但是很早就遇到了一个问题,我如何在泛型.HasFlag()
上调用Enum
?
public class Example<TEnum> where TEnum : struct {
}
如何向其添加
[Flags]
属性? 最佳答案
调用实例方法无论如何都需要装箱,因此,由于不能约束为Enum
,只需放弃泛型并使用Enum
。例如,代替:
void Something(TEnum enumValue, TEnum flags)
{
if (enumValue.HasFlags(flags))
//do something ...
}
执行以下操作:
void Something(Enum enumValue, Enum flags)
{
if (enumValue.HasFlags(flags))
//do something ...
}
在一般方法中,您可以实现如下目标:
void Something(TEnum enumValue, TEnum flags)
{
Enum castValue = (Enum)(object)enumValue;
Enum castFlags = (Enum)(object)flags;
if (castValue.HasFlags(castFlags))
//do something ...
}
如果调用的方法的值类型不是枚举,则在运行时将引发异常。您也可以通过
ValueType
而不是object
进行强制转换,因为type参数表示值类型:Enum castValue = (Enum)(ValueType)enumValue;
关于c# - HasFlag具有通用枚举吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9519596/