Ric*_*ick 5 c# enums enum-flags visual-studio-2015
我知道你可以用这种方式配置C#enum标志:
[Flags]
public enum MyEnum
{
Unknown = 0,
Type1 = 1,
Type2 = 2,
Type3 = 4,
Type4 = 8,
Type5 = 16
}
Run Code Online (Sandbox Code Playgroud)
一旦配置完毕,您就可以代表一组这样的枚举:
MyEnum enumerationSet = MyEnum.Type1 | MyEnum.Type2
Run Code Online (Sandbox Code Playgroud)
然后,您可以对此集进行检查,例如:
if(enumerationSet.HasFlag(MyEnum.Type1))
{
// Do something
}
Run Code Online (Sandbox Code Playgroud)
或者打印他们的值,如下:
Console.WriteLine("{0}", enumerationSet);
Run Code Online (Sandbox Code Playgroud)
哪个会打印:
Type1, Type2
Run Code Online (Sandbox Code Playgroud)
但是,我可以按相反顺序进行吗?例如,如果我知道的话
MyEnum.Type1 | MyEnum.Type2 == 3
Run Code Online (Sandbox Code Playgroud)
那我可以问MyEnum一下它的价值/类型是什么等于3?然后,我可以创建一个扩展方法(GetSet)来执行如下:
List<MyEnum> myEnumSetList = MyEnum.GetSet(3)
Run Code Online (Sandbox Code Playgroud)
返回一MyEnum组或一组值,即{1, 2}.
请指教.
编辑:我终于搞清楚了.在下面发表我的答案.
经过一些修改后,我能够根据相应集合的值或运算来解析枚举值列表:
protected List<MyEnum> GetEnumSet(int flagNumber)
{
List<MyEnum> resultList= new List<MyEnum>();
foreach (MyEnum value in Enum.GetValues(typeof(MyEnum)))
{
if (((MyEnum)flagNumber).HasFlag(value))
{
resultList.Add(value);
}
}
return resultList;
}
Run Code Online (Sandbox Code Playgroud)
这里,flagNumber是各个列表的值 OR'ed,即 MyEnum.Type1 | MyEnum.Type2。因此,通过发送此方法flagNumber,我得到了列表{ MyEnum.Type1, MyEnum.Type2 }
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |