我有一个标记的枚举,需要检索其上设置的所有值的名称.
我目前正在利用枚举的ToString()方法,该方法返回以逗号分隔的元素.
public void SetRoles(Enums.Roles role)
{
IList<Entities.Role> roleList = role.ToString("G").Split(',')
.Select(r => new Entities.Role(r.Trim()))
.ToList();
...
}
Run Code Online (Sandbox Code Playgroud)
我敢肯定必须有比这更好的方法.
Grz*_*nio 31
好问题!
我想不出更好的事情:
public void SetRoles(Enums.Roles role)
{
List<string> result = new List<string>();
foreach(Roles r in Enum.GetValues(typeof(Roles))
{
if ((role & r) != 0) result.Add(r.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
Mic*_*uno 27
如果你真的只是想要字符串,就不会比以前简单得多:
string[] flags = role.ToString().Split(',');
这比使用LINQ简单,而且仍然只是一行代码.或者如果你想要一个列表而不是问题中的示例中的数组,你可以将数组转换为一个列表:
List<string> flags = new List<string>(role.ToString().Split(','));
在我的情况下,我需要一个通用的解决方案,并想出了这个:
value.ToString().Split(',').Select(flag => (T)Enum.Parse(typeof(T), flag)).ToList();
Enum.Parse将处理ToString输出的连接值就好了.使用立即窗口证明:
? System.Enum.Parse(typeof(System.AttributeTargets), "Class, Enum")
Class | Enum
Run Code Online (Sandbox Code Playgroud)
(第二行是输出,它在调试器/即时窗口中与通用Enum.ToString()输出不同).
| 归档时间: |
|
| 查看次数: |
16038 次 |
| 最近记录: |