【问题标题】:Type.getType() can't find the classType.getType() 找不到类
【发布时间】:2013-09-13 04:17:37
【问题描述】:

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

我该如何解决这个错误?

谢谢。

【问题讨论】:

  • 请展示一个简短但完整的程序来说明问题。另请注意,声明一个与其命名空间同名的类是一个非常糟糕的主意——公共嵌套类型通常也不是一个好主意。
  • 为什么不直接使用typeof(Homework.Homework.Functions)

标签: c# null gettype


【解决方案1】:

您需要为GetType(string) 指定程序集限定名称。实例化你的 Homework 类并查看它的

GetType().FullName 

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-07-02
      • 2011-04-16
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多