如何在 .NET C# 3.5 中循环访问"set"枚举



我知道在。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
}

编辑:只有被接受的答案值得一看,其余的评论/答案可以被安全地忽略。

您应该能够编写这样的内容。如果你想,你可以让它泛型,但没有办法将约束设置为enum,所以你必须自己检查反射。

public static bool HasFlag(YourEnum source, YourEnum flag)
{
    return (source & flag) == flag;
}
foreach (EnumType enumType in Enum.GetValues(typeof(EnumType)))
{
    if(enumVar.HasFlag(enumType)) 
    {
        Console.WriteLine(enumTpye.ToString());
    }
}
switch enumvar
{
case valueOne:
{
//do some thing
breake;
}
case valuetwo:
{
//do some thing else
break;
}
default:
break;
    }

你可以这样做对EnumType

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

这将返回ValueOne, ValueTwo, ValueThree…腐蚀不确定这是否是您正在寻找的,请测试并让我以及其他人知道

最新更新