假设我有这个枚举:
[Flags]
public enum SomeType
{
Val1 = 0,
Val2 = 1,
Val3 = 2,
Val4 = 4,
Val5 = 8,
Val6 = 16,
All = Val1 | Val2 | Val3 | Val4 | Val5 | Val6
}
Run Code Online (Sandbox Code Playgroud)
和一些变量:
SomeType easyType = SomeType.Val1 | SomeType.Val2;
SomeType complexType = SomeType.All;
Run Code Online (Sandbox Code Playgroud)
如果我想循环第一个枚举的值,我可以简单地做:
foreach(string s in easyType.ToString().Split(','))
{ ... }
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将相同的方法应用于'complexType'时,我得到值'All',这当然是有效的,因为它也是枚举的可能值之一.但是,有没有一种巧妙的方法来实际看到SomeType.All创建的值是什么?我知道我可以手动循环遍历所有这些值:
if(complexType.HasFlag(ManualType.Val1) && ...
Run Code Online (Sandbox Code Playgroud)
var result = string.Join(",",
Enum.GetValues(typeof(SomeType))
.Cast<SomeType>()
.Where(v => complexType.HasFlag(v)));
Run Code Online (Sandbox Code Playgroud)
您可以编写一个扩展方法以避免重复。