在C#反射中获取“类型”的类型

时间:2009-11-24 20:05:23

标签: c# reflection

这在文档中比我想象的更难找到。无论如何,我有Type的一些实例。如何确定它们是否代表类,方法,接口等?

class Bla { ... }
typeof(Bla).GetKindOrWhatever() // need to get something like "Class"

(我在Linux上使用Mono但不应该影响这个问题,我正在制作可移植的代码)

5 个答案:

答案 0 :(得分:9)

Type.IsClass可能对此有所帮助。还Type.IsInterface

退房...... http://msdn.microsoft.com/en-us/library/system.type_members.aspx

Type上有很多“IsXxxx”属性。希望这些可以做你想要的。

顺便说一下,你应该在SO上查看关于这个主题的其他问题,包括这个......

typeof(System.Enum).IsClass == false

...如果您要检查的类型是枚举类型,因为有一些奇怪的(但可预测的)结果。

答案 1 :(得分:8)

Type类中有很多属性。

typeof(Bla).IsClass
typeof(Bla).IsInterface

http://msdn.microsoft.com/en-us/library/system.type_properties.aspx

答案 2 :(得分:1)

Type类有一些名为IsXXX的属性 例如,它有一个IsEnum,IsClass,IsInterface 如果我理解你的问题,这就是你需要的

答案 3 :(得分:1)

正如其他人所提到的,Type类有各种属性,如果你只需要知道你的类型是类,接口,委托等,你可以使用它们。

如果您有一个Type对象并且想知道它是否是特定类型,那么我建议使用Type类上的IsAssignableFrom方法:

        Type objectType = obj.GetType();
        Type interfaceType = typeof(IExample);

        if (interfaceType.IsAssignableFrom(objectType))
        {
            //...
        }

答案 4 :(得分:0)