2

我在一个类中有很多静态方法,我想获取某个方法是否在类 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.

但它给了我一个 System.NullReferenceException 与 if() 在它的行。

节目开始:

namespace Homework
{
class Homework
{
    static void Main()
    {

类声明:

public class Functions
    {

我可能应该说 Functions 类在 Homework 类中。

我该如何解决这个错误?

谢谢。

4

2 回答 2

11

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

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

那么就 CLR 而言,您将看到完全限定名称。

所以你要:

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

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

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

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

于 2013-09-09T15:58:39.837 回答
1

您需要为GetType(string). 实例化您的 Homework 课程并查看其

GetType().FullName 
于 2013-09-09T15:58:52.777 回答