我已經創建了一個擴展方法等..檢查是否完全只是這些標誌在枚舉集
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 –