9

我可以创建一个具有完全限定名称的新类,例如Namespace.OuterClass.NestedClass. 但试图通过Type.GetType("Namespace.OuterClass.NestedClass")返回来获取类型null。这是示例代码:

namespace Sample
{
   public class Program
   {
      public class Animal { }
      public class Vegetable { }
      public class Mineral { }

      static public void Test()
      {
         Object o = new Sample.Program.Vegetable();
         Type t = Type.GetType("Sample.Program.Vegetable"); // returns null
         Console.ReadKey();
      }

      static void Main(string[] args)
      {
         Program.Test();
      }
   }
}

如何Type.GetType用于嵌套类?

4

1 回答 1

25

C# 完全限定名称的字符串值+在类之间使用。使用 . 通过字符串获取类型Type.GetType("Namespace.OuterClass+NestedClass")

MSDN 文档为Type.GetType(string)各种类型(泛型类型、参数、非托管指针等)提供了一个语法表,包括“父类和嵌套类”。

将这些行添加到问题的示例代码中:

string typeName1 = typeof(Sample.Program.Vegetable).FullName;
string typeName2 = typeof(Vegetable).FullName;

将证明字符串类型名称等于Sample.Program+Vegetable

ECMA-335 Partition IV 的关联 CLILibrary.xml 提供了此约定的最终详细信息。Type.GetType(string)ECMA-335 中的语法表与 MSDN 文档中使用的语法表相同。

于 2013-09-27T15:50:15.377 回答