我在类中有很多静态方法,如果某个方法在X类中,我想得到它,如果是,我想调用它。我查了一下:
if (Type.GetType("Homework.Homework.Functions").GetMethod(methodName) == null)
{
Console.WriteLine("No such method.\nPress any key to restart the program");
Console.ReadKey();
Console.Clear();
Main();
return;
}
else
Type.GetType("Homework.Homework.Functions").GetMethod(methodName).Invoke(null, parametersArray); // Invoking the method.
但是它给了我一个带有if()的行的System.NullReferenceException。
该计划的开始:
namespace Homework
{
class Homework
{
static void Main()
{
班级宣言:
public class Functions
{
我可能应该说类函数在类Homework中。
如何解决此错误?
感谢。
答案 0 :(得分:11)
问题是嵌套类型在IL名称中用+
而不是.
分隔。如果你写:
Console.WriteLine(typeof(global::Homework.Homework.Functions));
然后,就CLR而言,您将看到完全限定的名称。
所以你想要:
Type.GetType("Homework.Homework+Functions")
假设确实需要按名称获取它 - 尽可能避免这种情况。在编译时知道类型的任何地方使用typeof
(并且如果它在不同的程序集中,很高兴有一个引用)。
如果您在同一个程序集中调用它,那将会有效。如果您从不同的程序集中调用Type.GetType
,则还需要使用程序集限定名称。
答案 1 :(得分:1)
您需要为GetType(string)
指定程序集限定名称。实例化您的家庭作业课程并查看其
GetType().FullName