我可以创建一个具有完全限定名称的新类,例如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
用于嵌套类?
答案 0 :(得分:19)
C#完全限定名称的字符串值在类之间使用+
。使用Type.GetType("Namespace.OuterClass+NestedClass")
获取字符串类型。
MSDN documentation for Type.GetType(string)
给出了各种类型的语法表(泛型类型,参数,非托管指针等),包括“父类和嵌套类”。
将这些行添加到问题的示例代码中:
string typeName1 = typeof(Sample.Program.Vegetable).FullName;
string typeName2 = typeof(Vegetable).FullName;
将证明字符串类型名称等于Sample.Program+Vegetable
ECMA-335分区IV的关联CLILibrary.xml提供了此约定的明确详细信息。 ECMA-335中的Type.GetType(string)
语法表与MSDN文档中使用的语法表相同。