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

本文关键字:程序集 枚举成员 获取 | 更新日期: 2023-09-27 18:16:57

我有一个enum

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

现在我想要得到enum成员

的完全限定名

所以结果将是

ConsoleTestApplication.Cars.Audi

比如

Cars.Audi.GetType () .FullName;

Cars.Audi.GetType () .AssemblyQualifiedName;

我正在寻找的东西,但实际上没有一个是我需要的。

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

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

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

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的歧义。

你可以用一个连接的结果来代替它:

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 }