方法反射中的NullReferenceException

时间:2012-11-23 11:32:14

标签: c# nullreferenceexception

我正在尝试创建显示特定类型所有方法的方法 代码是:

public static void AllMethods(Type t)
    {
        var query = from x in t.GetMethods() select x;
        foreach (var item in query)
            Console.WriteLine(item.Name);
    }

我尝试了另一个版本:

public static void AllMethods(Type t)
    {
        MethodInfo[] m = t.GetMethods();
        foreach (MethodInfo item in m)
            Console.WriteLine(item.Name);
    }

两个版本都编译,但是当它传递参数时,会发生NullReferenceException:

static void Main(string[] args)
    {   
        AllMethods(Type.GetType("Z")); // Z is a class name

        Console.ReadLine();
    }

我想解决方案很简单,但我的大脑现在无法弄清楚它) 有什么建议吗?

1 个答案:

答案 0 :(得分:3)

我的猜测是Z不是完全限定的类名(你需要包含命名空间),或者它是既不在mscorlib中也不在mscorlib中的类的名称调用程序集。要使用其他程序集中的类,您还需要包含程序集名称(如果它的名称很强,则包括版本号等)。或者使用更简单的Assembly.GetType(),如果你已经对程序集有引用,例如因为你知道同一个组件中的另一种类型。

假设我是对的,你应该完全忽略你的AllMethods方法。相反,请检查:

Type type = Type.GetType(...);
Console.WriteLine("type is null? {0}", type == null);

当然,如果您在编译时知道类型,那么最好使用typeof