簡體   English   中英

如何在.NET C#3.5中迭代“set”枚舉

[英]How to iterate through “set” enum in .NET C# 3.5

我知道在.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;
}
foreach (EnumType enumType in Enum.GetValues(typeof(EnumType)))
{
    if(enumVar.HasFlag(enumType)) 
    {
        Console.WriteLine(enumTpye.ToString());
    }
}

您可以執行類似這樣的操作來執行EnumType的foreach循環

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

這將返回ValueOne,ValueTwo,ValueThree ..蝕刻不確定這是否是您正在尋找的請測試並讓我以及其他人知道

switch enumvar
{
case valueOne:
{
//do some thing
breake;
}
case valuetwo:
{
//do some thing else
break;
}
default:
break;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM