2

私は.NET 4でHasFlagを使用できることを知っています

.NET 3.5 で次の代替手段はありますか?

if ((enumVar & EnumType.ValueOne) == EnumType.ValueOne)
{
  // someMethod(1) or someMethod(EnumType.ValueOne)
}
if ((enumVar & EnumType.ValueTwo) == EnumType.ValueTwo)
{
  // someMethod(2) or someMethod(EnumType.ValueTwo)
}
if ((enumVar & EnumType.ValueThree) == EnumType.ValueThree)
{
  // someMethod(3) or someMethod(EnumType.ValueThree)
}
if ((enumVar & EnumType.ValueFour) == EnumType.ValueFour)
{
  // someMethod(4) or someMethod(EnumType.ValueFour)
}

...列挙型の各値についてなど?これを達成するには、 for..each ループを使用できる必要があります。ここで、 someMethod への引数はループのインデックスですか?

[Flags]
enum EnumType
{
  ValueOne = 1
  , ValueTwo = 2
  , ValueThree = 4
  , ValueFour = 8
}

編集:受け入れられた回答を見る価値があるだけで、残りのコメント/回答は安全に無視できます。

4

4 に答える 4

5

このようなものを書くことができるはずです。必要に応じて汎用にすることもできますが、制約を列挙型に設定する方法はないため、リフレクションで自分で確認する必要があります。

public static bool HasFlag(YourEnum source, YourEnum flag)
{
    return (source & flag) == flag;
}
于 2013-01-21T15:48:20.460 に答える
3
foreach (EnumType enumType in Enum.GetValues(typeof(EnumType)))
{
    if(enumVar.HasFlag(enumType)) 
    {
        Console.WriteLine(enumTpye.ToString());
    }
}
于 2013-01-21T15:49:22.953 に答える
0

このようなことを実行して、EnumTypeのforeachループを実行できます。

foreach (EnumType enumType in Enum.GetValues(typeof(EnumType)))
{
    if (enumType.HasFlag(enumType))
    {
        Console.WriteLine(enumType.ToString());
    }
}

これにより、ValueOne、ValueTwo、ValueThreeが返されます。これが探しているものかどうかわからない場合は、テストして、私や他の人に知らせてください。

于 2013-01-21T15:44:15.257 に答える
0
switch enumvar
{
case valueOne:
{
//do some thing
breake;
}
case valuetwo:
{
//do some thing else
break;
}
default:
break;
    }
于 2013-01-21T15:48:45.530 に答える