Foo
和Bar
枚举成员共享相同的关联值180:
public enum EnumShareValues
{
Default = 0,
Foo = 180,
Bar = 180,
}
此代码打印String representation of 'Bar' is 'Foo'
这是正确的,它返回第一次出现的值180:
const EnumShareValues bar = EnumShareValues.Bar;
Debug.WriteLine("String representation of 'Bar' is '{0}'", bar);
但它是否有可能获得值为180的枚举项的两个名称? 类似的东西:
// would in this case return "Foo, Bar"
Enum.GetAllNames(typeof(EnumShareValues), EnumShareValues.Bar, ",");
修改 经过一些测试和摆弄后,我结束了以下代码。谢谢你的所有答案!
public static IEnumerable<string> GetAllNames<T>(T propValue)
where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new ArgumentException("T must be an enumerated type");
var allNames = Enum.GetNames(typeof(T))
.Where(name => ((T)Enum.Parse(typeof(T), name)).Equals(propValue));
return allNames;
}
答案 0 :(得分:2)
答案 1 :(得分:1)
内置任何内容,但您可以轻松地将几种不同的方法串联起来:
var allNames =
Enum.GetNames(typeof (EnumShareValues))
.Where(name => (EnumShareValues)Enum.Parse(typeof (EnumShareValues), name)
== EnumShareValues.Bar);
如果允许我们将通用方法限制为枚举,那么将其作为通用辅助方法进行包装将非常有用。当然,您可以这样做,但如果您尝试将其与非基于枚举的类型一起使用,则会产生运行时错误。
答案 2 :(得分:1)
这种一般的puprose方法有效(fiddle):
我从枚举名称开始并获得相应的值:
public static class Util
{
public static IEnumerable<string> GetSynonims(this Enum value)
{
Type e = value.GetType();
return Enum.GetNames(e).Where(n => Enum.Parse(e, n).Equals(value));
}
}
用法:
Console.WriteLine(String.Join(", ", EnumShareValues.Bar.GetSynonims()));
打印:
Foo, Bar