如何获得复杂的枚举值字符串表示

Iam*_*per 10 c# enums flags

假设我有这个枚举:

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

Che*_*hen 4

var result = string.Join(",",
                 Enum.GetValues(typeof(SomeType))
                     .Cast<SomeType>()
                     .Where(v => complexType.HasFlag(v)));
Run Code Online (Sandbox Code Playgroud)

您可以编写一个扩展方法以避免重复。