0

我有枚举

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

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

所以结果将是

ConsoleTestApplication.Cars.Audi

就像是

Cars.Audi.GetType().FullName;

或者

Cars.Audi.GetType().AssemblyQualifiedName;

我正在寻找什么,但实际上没有一个能满足我的需要。

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

4

2 回答 2

2

你只需要一个字符串吗?如果是这样,您可以使用这样的扩展方法:

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.

于 2013-06-04T15:43:54.263 回答
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 }
于 2013-06-04T15:38:20.783 回答