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
可用于不同的枚举。我改变了主意:)。但这两个答案对我都很有帮助。