获取枚举成员的程序集限定名称

时间:2013-06-04 15:30:53

标签: c# enums fully-qualified-naming

我有枚举

  namespace ConsoleTestApplication
  {
    public enum Cars
    {
        Audi,
        BMW,
        Ford
    }
  }

现在我想获得枚举成员的完全限定名称

所以结果将是

ConsoleTestApplication.Cars.Audi

类似

  

Cars.Audi.GetType()全名;

  

Cars.Audi.GetType()AssemblyQualifiedName;

我在寻找什么,但实际上并没有我需要的东西。

我之所以需要它的原因,因为我在不同的命名空间中有两个相同的枚举(不要因为糟糕的设计而责备我,这就是我的项目应该如何) 在我的程序的一部分中,我需要使用此枚举的成员,但因为我有相同的枚举,它会抱怨不同命名空间中相同枚举之间的歧义。所以为了避免它,我必须提供完全限定的名称,为什么我不能手动执行它的原因,因为这是一种自动生成的文件,所以我需要在编译时指定programmaticaly

2 个答案:

答案 0 :(得分:0)

你可以用连锁结果伪造它:

class Program
{
    static void Main(string[] args)
    {
        Cars car = Cars.Audi;

        Console.WriteLine("{0}.{1}", car.GetType().FullName, Enum.GetName(typeof(Cars), car));
    }
}

enum Cars { Audi, BMW, Ford }

答案 1 :(得分:0)

你只需要一根绳子吗?如果是这样,你可以使用这样的扩展方法:

public static string GetFullyQualifiedEnumName<T>(this T @this) where T : struct, IConvertible
{
    if (!typeof(T).IsEnum) 
    {
        throw new ArgumentException("T must be an enum");
    }
    var type = typeof(T);
    return string.Format("{0}.{1}.{2}", type.Namespace, type.Name, Enum.GetName(type, @this));      
}

如果您只是想引用含糊不清的枚举,只需使用MyNameSpace.MyEnum.MyValue,这会将其从MyOtherNameSpace.MyEnum.MyValue中消除歧义。