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 回答