我已经创建了一个这样的扩展方法..
public static bool AllFlagsSet<T>(this T input, params T[] values) where T : struct, IConvertible
{
bool allSet = true;
int enumVal = input.ToInt32(null);
foreach (T itm in values)
{
int val = itm.ToInt32(null);
if (!((enumVal & val) == val))
{
allSet = false;
break;
}
}
return allSet;
}
这非常适合我需要的目的,但是我现在需要创建一个具有相同签名的方法,该方法检查是否仅设置了这些值。
基本上是这样的。
public static bool OnlyTheseFlagsSet<T>(this T input, params T[] values) where T : struct, IConvertible
{
}
我能想到的唯一方法是让所有可用的枚举值检查已设置并确认只有提供的两个已设置。
有没有另一种方法可以使用某种按位运算来解决这个问题?