C# 如何获取具有相同值的枚举项的所有名称?
C# 如何获取具有相同值的枚举项的所有名称?,c#,enums,C#,Enums,Foo和Barenum成员共享相同的关联值180: public enum EnumShareValues { Default = 0, Foo = 180, Bar = 180, } 此代码打印“Bar”的字符串表示形式为“Foo”,这是正确的,它返回第一次出现的值180: const EnumShareValues bar = EnumShareValues.Bar; Debug.WriteLine("String representation of 'Bar' i
Foo
和Bar
enum成员共享相同的关联值180:
public enum EnumShareValues
{
Default = 0,
Foo = 180,
Bar = 180,
}
此代码打印“Bar”的字符串表示形式为“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;
}
public静态IEnumerable GetAllName(T propValue)
其中T:struct,IConvertible
{
if(!typeof(T).IsEnum)
抛出新ArgumentException(“T必须是枚举类型”);
var allNames=Enum.GetNames(typeof(T))
其中(name=>((T)Enum.Parse(typeof(T),name)).Equals(propValue));
返回所有名称;
}
您的枚举需要是唯一的,如果您复制了id,那么您最终会在内部存储以下内容-查找包含集合中的值的调试窗口。我建议对代码进行一个小的重构以适应这种情况 您的枚举需要是唯一的,如果您复制了id,那么最终会在内部存储以下内容-查找包含集合中的值的调试窗口。我建议对代码进行一个小的重构以适应这种情况 没有内置的方法,但是您可以很容易地将几个不同的方法串在一起:
var allNames =
Enum.GetNames(typeof (EnumShareValues))
.Where(name => (EnumShareValues)Enum.Parse(typeof (EnumShareValues), name)
== EnumShareValues.Bar);
如果允许我们将泛型方法限制为枚举,那么将其总结为泛型辅助方法将是非常好的。当然,您可以这样做,但如果您尝试将其与非基于枚举的类型一起使用,则会产生运行时错误。没有内置任何内容,但您可以很容易地将几个不同的方法串在一起:
var allNames =
Enum.GetNames(typeof (EnumShareValues))
.Where(name => (EnumShareValues)Enum.Parse(typeof (EnumShareValues), name)
== EnumShareValues.Bar);
如果允许我们将泛型方法限制为枚举,那么将其总结为泛型辅助方法将是非常好的。当然,您可以这样做,但如果尝试将其与非基于枚举的类型一起使用,则会产生运行时错误。此常规puprose方法有效(): 我从枚举名称开始,得到相应的值:
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));
}
}
印刷品:
Foo, Bar
这个通用的方法可以工作(): 我从枚举名称开始,得到相应的值:
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));
}
}
印刷品:
Foo, Bar
谢谢你的回答。enum附带第三方库,无法重构。哎哟:)我看到还有其他答案可以解决这个问题,很高兴你找到了解决方案。谢谢你的回答。enum附带第三方库,无法重构。哎哟:)我看到还有其他答案可以解决这个问题,很高兴你找到了解决方案。谢谢你的回答,这对我很有帮助!谢谢你的回答,这对我很有帮助!谢谢你的回答,Enum。这里需要解析。我接受了丹宁的回答,因为他回答得更快。@dee,这取决于你。请注意,
GetSynonims
可用于不同的枚举。我改变了主意:)。但这两个答案对我都很有帮助。谢谢你的回答,Enum。这里需要解析。我接受了丹宁的回答,因为他回答得更快。@dee,这取决于你。请注意,GetSynonims
可用于不同的枚举。我改变了主意:)。但这两个答案对我都很有帮助。