Type.getType()找不到该类

sho*_*ham 2 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.
Run Code Online (Sandbox Code Playgroud)

但是它给了我一个带有if()的行中的System.NullReferenceException.

该计划的开始:

namespace Homework
{
class Homework
{
    static void Main()
    {
Run Code Online (Sandbox Code Playgroud)

课堂宣言:

public class Functions
    {
Run Code Online (Sandbox Code Playgroud)

我可能应该说类函数在类Homework中.

我该如何解决这个错误?

谢谢.

Jon*_*eet 11

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

Console.WriteLine(typeof(global::Homework.Homework.Functions));
Run Code Online (Sandbox Code Playgroud)

那么就CLR而言,你会看到完全限定的名称.

所以你要:

Type.GetType("Homework.Homework+Functions")
Run Code Online (Sandbox Code Playgroud)

假设你真的需要通过名字得到它 - 尽可能避免这种事情.typeof在编译时使用任何您知道类型的地方(如果它在不同的程序集中,我们很乐意提供引用).

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

我还强烈建议您不要将类命名为与其命名空间相同的类.