誰かが疑問に思っている場合:私はWPF用のBindableenumconverterを構築するのと同じことをする必要がありました。
Reflectionでの値の意味がわからないため、手動で値を切り替える(チェックボックスpeにバインドする)必要
がありました。すべてのビットを設定するには、フラグ付き列挙型の値を-1に設定する際に問題があります。
-1に設定し、すべての値のフラグを解除すると、未使用のすべてのビットのフラグが解除されないため、0にはなりません。
これは私の状況に最適なワットです。
SomeRightEnum someRightEnum = SomeRightEnum.CanDoNothing;
Type enumType = someRightEnum.GetType();
int newValue = 0;
var enumValues = Enum.GetValues(enumType).Cast<int>().Where(e => e == 1 || e % 2 == 0);
foreach (var value in enumValues)
{
newValue |= value;
}
Console.WriteLine(newValue);
または、拡張メソッドが必要な場合:
public static class FlagExtensions
{
public static TEnum AllFlags<TEnum>(this TEnum @enum)
where TEnum : struct
{
Type enumType = typeof(TEnum);
long newValue = 0;
var enumValues = Enum.GetValues(enumType);
foreach (var value in enumValues)
{
long v = (long)Convert.ChangeType(value, TypeCode.Int64);
if(v == 1 || v % 2 == 0)
{
newValue |= v;
}
}
return (TEnum)Enum.ToObject(enumType , newValue);
}
}