代码之家  ›  专栏  ›  技术社区  ›  Bob Tway

遍历按位枚举的保存值

  •  1
  • Bob Tway  · 技术社区  · 14 年前

    我使用位枚举作为中继器控件的数据源,其中每行都有一个复选框。用户保存数据时,与复选框对应的枚举值将保存到单个数据库字段中。

    很明显,当我从数据库中得到枚举字段时,要做的事情就是遍历枚举字段中的现有值。换言之,如果保存的值对应于枚举中几个选项中的两个选项,我只需要循环这两个选项。但是,我看不到任何方法或属性可以用来实现这一点。有人能给我指出正确的方向吗?

            Dim selectedPrefs As String = comsPrefs.ToString()
            Dim splitStr() As String = selectedPrefs.Split(","c)
            Dim i As Integer
    
            For i = 0 To splitStr.Length - 1
                'do some cool stuff
            Next
    
    2 回复  |  直到 11 年前
        1
  •  2
  •   LukeH    14 年前

    像这样的?

    [Flags]
    public enum YourEnum
    {
        One = 1, Two = 2, Four = 4, Eight = 8
    }
    
    // ...
    
    YourEnum exampleData = YourEnum.Two | YourEnum.Four;
    
    var values = Enum.GetValues(typeof(YourEnum))
                     .Cast<YourEnum>()
                     .Where(x => exampleData.HasFlag(x));
    
    foreach (var v in values)
    {
        Console.WriteLine(v);
    }
    

    请注意 HasFlag 方法仅在.NET4中可用—如果您使用的是早期版本的框架,则需要使用 Where(x => (exampleData & x) == x)

        2
  •  0
  •   Richard    14 年前

    要获取枚举的所有值,请使用 Enum.GetValues(typeof(myEnumeration))

    System.Enum 具有其他方法,允许您获取标识符(名称)并将命名转换为/从值。