我已经创建了一个扩展方法等..检查是否完全只是这些标志在枚举集
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
{
}
我能想到这样做的唯一方法是让它们设置所有可用的枚举值检查和确认仅供两人一直。
是否有另一种方法来解决这个问题,使用某种按位操作?
这是一门功课?为什么T约束一个结构而不是枚举? – LightStriker
哈哈,那真是令人尴尬。不,只是没有对位操作的牢固掌握......这是一个真正的需求 –
试着将它约束到Enum并看看会发生什么。 ; -p –