我有一个带有枚举属性的模型。当我调用我的服务时,模型会返回,并且我的枚举属性包含以下数据: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();
最后一个是最正确的,我认为。