循环遍历枚举结果属性



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

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

如何使用枚举属性执行此操作?

var form = await _formService.GetById() ;

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

这是我的枚举:

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

这是你要找的吗?

    [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;
    }

如果你像这样定义了枚举

[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();

最后一个是最正确的,我认为。

最新更新