我已经创建了一个这样的扩展方法..
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
{
}
我能想到的唯一方法是获取所有可用的枚举值,检查哪些已设置,并确认只有提供的两个已设置。
是否有另一种方法可以使用某种按位运算来解决这个问题?
最佳答案
对所有必需的标志执行“或”操作并与输入进行比较 - 应该相等。类似于以下,使用正确的循环来计算左侧的值:
var onlyTheseFlagsSet = (value[0] | value[1]) == input;
关于c# - 检查是否仅在枚举中设置了这些标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13446882/