Получить сборочное квалифицированное имя члена enum

У меня есть enum

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

теперь я хочу получить полное имя члена enum

так что результат будет

ConsoleTestApplication.Cars.Audi

что-то вроде

Cars.Audi.GetType() ПолноеИмя.

или же

Cars.Audi.GetType() AssemblyQualifiedName.

что я ищу, но ни один из них на самом деле не делает то, что мне нужно.

Причина, по которой мне это нужно, потому что у меня есть два одинаковых перечисления в разных пространствах имен (не вините меня в плохом дизайне, так должно быть в моем проекте), и в одной части моей программы мне нужно использовать элемент это перечисление, но так как у меня одни и те же перечисления, он будет жаловаться на неоднозначность между одинаковыми перечислениями в разных пространствах имен. Поэтому, чтобы избежать этого, я должен предоставить полностью определенное имя, причину, почему я не могу сделать это вручную, потому что это вид автоматически генерируемых файлов, поэтому мне нужно указать это программно во время компиляции

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,

Вы можете подделать его с объединенным результатом:

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 }
Другие вопросы по тегам