Type.getType()找不到该类

时间:2013-09-09 15:55:20

标签: c# null gettype

我在类中有很多静态方法,如果某个方法在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中。

如何解决此错误?

感谢。

2 个答案:

答案 0 :(得分:11)

问题是嵌套类型在IL名称中用+而不是.分隔。如果你写:

Console.WriteLine(typeof(global::Homework.Homework.Functions));

然后,就CLR而言,您将看到完全限定的名称。

所以你想要:

Type.GetType("Homework.Homework+Functions")

假设确实需要按名称获取它 - 尽可能避免这种情况。在编译时知道类型的任何地方使用typeof(并且如果它在不同的程序集中,很高兴有一个引用)。

如果您在同一个程序集中调用它,那将会有效。如果您从不同的程序集中调用Type.GetType,则还需要使用程序集限定名称。

我也强烈建议你not to name a class the same as its namespace

答案 1 :(得分:1)

您需要为GetType(string)指定程序集限定名称。实例化您的家庭作业课程并查看其

GetType().FullName