可以按位或枚举。通常这是在Flags枚举上完成的。使用泛型的按位或枚举枚举
例如var foo = MyEnum.ABC | MyEnum.XCN
我试图创建一个方法转换枚举的阵列成使用泛型组合枚举。
这是我曾尝试:
private T CombineFlags<T>(params T[] flags) where T : struct, IConvertible
{
return flags.Select(flag => flag).Aggregate((x, y) => x | y);
}
但是,我不能申请运营商“\”到T和T.铸造似乎并没有帮助。 struct, IConvertible
似乎是最接近枚举的,但显然不够接近使用'|'运营商。 System.Enum也不是很有帮助。
如何在泛型枚举上执行此操作? (是否有可能?)
你不能 - 运算符是静态的,编译器无法猜测T的传入 - 它们可能不支持'|'运算符。 –
您可以尝试的一件事是将值转换为“long”,执行操作并将其转换回来。 –