gpt4 book ai didi

c# - Type.getType() 找不到类

转载 作者:行者123 更新时间:2023-11-30 19:05:39 26 4
gpt4 key购买 nike

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

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

如何解决这个错误?

谢谢。

最佳答案

问题是嵌套类型在 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 .

关于c# - Type.getType() 找不到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702245/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com