确定类型名称是否为枚举类型

时间:2016-10-06 20:45:32

标签: c# types enums code-generation

我有一个代码生成器,可以解析类和类的xml规范。属性 - 包括每个属性的类型。

string int bool类型的属性很容易处理。

但如果类型不是原始类型,那么我需要确定它是class还是enum

如果我有MyObject MyType的实例,我可以通过以下方式确定MyType是否为enum type

if (MyType.IsEnum()) {}

但我所拥有的只是该类型的名称。

3 个答案:

答案 0 :(得分:1)

尝试

 instance.GetType().IsEnum

或者只是

myType.IsEnum;

UPD。没有注意到你只有类型名称。

Type.GetType("my_type").IsEnum

答案 1 :(得分:1)

尝试Type.GetType认为它符合您的要求,或者至少会返回一个Type对象,然后您可以调用.IsEnum

您需要为您的类型使用完全限定名称,例如" MyNamespace.MyType"不只是" MyType"

答案 2 :(得分:0)

使用setTimeout(function() { $('#' + stack_id).slideUp(500).animate({ opacity: 0 }, { queue: false, duration: 'slow' }); }, 1000); }); 方法

来自MSDN Type.GetType Method (String)

  

获取具有指定名称的Type,执行区分大小写   搜索

要使其正常工作,您需要提供枚举类型的程序集限定名称

  

要获取的类型的程序集限定名称。如果类型在当前正在执行   汇编或在Mscorlib.dll中,提供类型名称就足够了   由其命名空间限定

Type.GetType("nameofEnum")

因此,如果您的枚举在某个命名空间内声明,则需要包含完整的“路径”

Type enumType = Type.GetType("AssemblyName.EnumName");
bool isEnum = enumType.IsEnum;

然后获取类型

namespace Project
{
    namespace MyAllEnums
    {
        public enum DesignPatterns
        {
            Spagetti = 0,
            Factory = 1
        }
    }
}

如果您没有关于枚举类型的程序集名称的信息,那么另一种方法将检查您拥有的所有程序集,并返回您尝试查找的名称的第一个类型。

当前组装示例

Type enumType = Type.GetType("Project.MyAllEnums.DesignPatterns");
if (enumType.IsEnum)
{
    // ...
}

在上面的方法中,你得到的类型没有汇编限定名,但要注意你的内部命名空间内的枚举是否无效。