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


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

最佳答案

您应该能够编写这样的内容。您可以根据需要将其设为通用,但是无法将约束设置为枚举,因此您必须通过反射检查自己。

public static bool HasFlag(YourEnum source, YourEnum flag)
{
    return (source & flag) == flag;
}

08-17 20:07