【发布时间】:2012-11-16 04:12:41
【问题描述】:
借用这个问题How do I check if more than one enum flag is set?的代码我已经尝试实现一个通用扩展来执行这个测试。
我的第一次尝试如下。
public static bool ExactlyOneFlagSet(this Enum enumValue)
{
return !((enumValue & (enumValue - 1)) != 0);
}
导致
运算符“-”不能应用于“System.Enum”类型的操作数和 'int'
好吧,有道理,所以我想我会尝试这样的事情
public static bool ExactlyOneFlagSet<T>(this T enumValue) where T : struct, IConvertible
{
return !(((int)enumValue & ((int)enumValue - 1)) != 0);
}
导致
无法将类型“T”转换为“int”
在阅读了这种行为之后,这也是有道理的,但是究竟如何实现这种扩展方法。有好心人帮忙吗???
【问题讨论】:
标签: c# enums extension-methods flags