我有枚举
namespace ConsoleTestApplication
{
public enum Cars
{
Audi,
BMW,
Ford
}
}
现在我想获得枚举成员的完全限定名称
所以结果将是
ConsoleTestApplication.Cars.Audi
类似
Cars.Audi.GetType()全名;
或
Cars.Audi.GetType()AssemblyQualifiedName;
我在寻找什么,但实际上并没有我需要的东西。
我之所以需要它的原因,因为我在不同的命名空间中有两个相同的枚举(不要因为糟糕的设计而责备我,这就是我的项目应该如何) 在我的程序的一部分中,我需要使用此枚举的成员,但因为我有相同的枚举,它会抱怨不同命名空间中相同枚举之间的歧义。所以为了避免它,我必须提供完全限定的名称,为什么我不能手动执行它的原因,因为这是一种自动生成的文件,所以我需要在编译时指定programmaticaly
答案 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
中消除歧义。