我正在尝试创建显示特定类型所有方法的方法 代码是:
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();
}
我想解决方案很简单,但我的大脑现在无法弄清楚它) 有什么建议吗?
答案 0 :(得分:3)
我的猜测是Z
不是完全限定的类名(你需要包含命名空间),或者它是既不在mscorlib中也不在mscorlib中的类的名称调用程序集。要使用其他程序集中的类,您还需要包含程序集名称(如果它的名称很强,则包括版本号等)。或者使用更简单的Assembly.GetType()
,如果你已经对程序集有引用,例如因为你知道同一个组件中的另一种类型。
假设我是对的,你应该完全忽略你的AllMethods
方法。相反,请检查:
Type type = Type.GetType(...);
Console.WriteLine("type is null? {0}", type == null);
当然,如果您在编译时知道类型,那么最好使用typeof
。