我有一个枚举
public enum citys
{
a=1,
b=1,
c=1,
d=2,
e=2,
f=2,
};
我想基于价值返回Name
。例如,foreach return Enum.GetNames
Value =1
result --> a,b,c
foreach return Enum.GetNames that Value =2
result --> d,e,f
感谢您的帮助。
答案 0 :(得分:5)
你可以将Enum.GetNames
与Enum.Parse
结合使用 - 这不是我喜欢的事情,但它有效:
using System;
using System.Collections.Generic;
using System.Linq;
public enum City
{
a=1,
b=1,
c=1,
d=2,
e=2,
f=2,
}
class Test
{
static void Main()
{
// Or GetNames((City) 2)
foreach (var name in GetNames(City.a))
{
Console.WriteLine(name);
}
}
static IEnumerable<string> GetNames<T>(T value) where T : struct
{
return Enum.GetNames(typeof(T))
.Where(name => Enum.Parse(typeof(T), name).Equals(value));
}
}
或者你可以用反射得到字段:
static IEnumerable<string> GetNames<T>(T value) where T : struct
{
return typeof(T).GetFields(BindingFlags.Public | BindingFlags.Static)
.Where(f => f.GetValue(null).Equals(value))
.Select(f => f.Name);
}
使用枚举是否是您想要实现的目标的良好设计并不是很清楚 - 这里的真正目标是什么?也许您应该使用查找?