私はそのような拡張メソッドを作成しました..
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
{
}
これを行う唯一の方法は、使用可能なすべての列挙値を取得して、設定されているものを確認し、提供された 2 つだけが使用されていることを確認することです。
ある種のビット演算を使用してこの問題を解決する別の方法はありますか?