我知道在.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
}
编辑:只有值得查看已接受的答案,才能安全地忽略其余评论/答案。
答案 0 :(得分:5)
你应该能够写出这样的东西。你可以根据需要使它成为通用的,但是没有办法将约束设置为枚举,所以你必须用反射来检查它。
public static bool HasFlag(YourEnum source, YourEnum flag)
{
return (source & flag) == flag;
}
答案 1 :(得分:3)
foreach (EnumType enumType in Enum.GetValues(typeof(EnumType)))
{
if(enumVar.HasFlag(enumType))
{
Console.WriteLine(enumTpye.ToString());
}
}
答案 2 :(得分:0)
您可以执行类似这样的操作来执行EnumType的foreach循环
foreach (EnumType enumType in Enum.GetValues(typeof(EnumType)))
{
if (enumType.HasFlag(enumType))
{
Console.WriteLine(enumType.ToString());
}
}
这将返回ValueOne,ValueTwo,ValueThree .. etch 不确定这是否是你想要的,请测试,让我和其他人知道
答案 3 :(得分:0)
switch enumvar
{
case valueOne:
{
//do some thing
breake;
}
case valuetwo:
{
//do some thing else
break;
}
default:
break;
}