循环枚举结果属性

时间:2016-11-08 15:34:58

标签: c# asp.net asp.net-mvc

我有一个带枚举属性的模型。当我调用我的服务时,模型会返回,我的enum-property包含以下数据:Test1 | Test2 | Test3

我想循环遍历该属性并将值分配给列表。

如何使用enum propery执行此操作?

var form = await _formService.GetById();

上面的代码生成一个带有枚举属性的结果,该属性名为Sections,其中包含我上面提供的数据,但我不知道如何循环使用它来获取值。

这是我的枚举:

[Flags]
public enum Sections
{
    Test1= 0,
    Test2= 1,
    Test3= 2,
    Test4= 4,
}

2 个答案:

答案 0 :(得分:0)

这是你在找什么?

    [Flags]
    public enum Sections
    {
        Test1 = 0,
        Test2 = 1,
        Test3 = 2,
        Test4 = 4,
    }

    public static List<Sections> getSectionsFromFlags(Sections flags)
    {
        var returnVal = new List<Sections>();
        foreach (Sections item in Enum.GetValues(typeof(Sections)))
        {
            if ((int)(flags & item) > 0)
                returnVal.Add(item);
        }
        return returnVal;
    }

答案 1 :(得分:0)

如果您已经定义了这样的枚举

[Flags]
public enum Sections
{
    Test1 = 0,
    Test2 = 1,
    Test3 = 2,
    Test4 = 4,
}

然后

var someValue = Sections.Test1 | Sections.Test3 | Sections.Test4;   
var values = Enum.GetValues(typeof(Sections))
                 .OfType<Sections>().Where(x=>(x&someValue)==x)
                 .ToArray();    

values现在包含所有三个值Sections.Test1 | Sections.Test3 | Sections.Test4

另一种解决方案(来自评论)

      var values = Enum.GetValues(typeof(Sections))
                  .OfType<Sections>()
                  .Where(x=>someValue.HasFlag(x))
                  .ToArray();

最后一个是最正确的,我想。