1

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

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();
    }

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

4

1 回答 1

3

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

假设我是对的,您应该AllMethods完全忽略您的方法。而是检查这个:

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

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

于 2012-11-23T11:33:42.523 回答