Получить сборочное квалифицированное имя члена 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 }