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

假设我有这个枚举:
[Flags]
public enum SomeType
{    
    Val1 = 0,Val2 = 1,Val3 = 2,Val4 = 4,Val5 = 8,Val6 = 16,All = Val1 | Val2 | Val3 | Val4 | Val5 | Val6
}

和一些变量:

SomeType easyType = SomeType.Val1 | SomeType.Val2;
SomeType complexType = SomeType.All;

如果我想循环访问第一个枚举的值,我可以简单地做:

foreach(string s in easyType.ToString().Split(','))
{ ... }

然而,当我尝试对’complexType’应用相同的方法时,我得到值“All”,这当然是有效的,因为它也是枚举的可能值之一.但是,是否有一个整洁的方法来实际看到SomeType.All创建的值是什么?我知道我可以手动循环遍历所有的值:

if(complexType.HasFlag(ManualType.Val1) && ...

解决方法

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

你可以编写一个扩展方法,以避免重复你自己.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...