获取枚举成员的程序集限定名
本文关键字:程序集 枚举成员 获取 | 更新日期: 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 }