Wie erhält man den Typ der verschachtelten class mit Type.GetType (String)

Ich kann eine neue class mit einem vollständig qualifizierten Namen wie Namespace.OuterClass.NestedClass erstellen. Type.GetType("Namespace.OuterClass.NestedClass") versuchen, den Typ mit Type.GetType("Namespace.OuterClass.NestedClass") . Hier ist Beispielcode:

 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(); } } } 

Wie kann ich Type.GetType für eine verschachtelte class verwenden?

Zeichenfolgewerte für vollständig qualifizierte C #-Namen verwenden + zwischen classn. Type.GetType("Namespace.OuterClass+NestedClass") Sie den Typ per Zeichenfolge mit Type.GetType("Namespace.OuterClass+NestedClass") .

Die MSDN-Dokumentation für Type.GetType(string) enthält eine Syntax-Tabelle für verschiedene Typen (generische Typen, Argumente, nicht verwaltete pointers usw.), einschließlich “Elternklasse und verschachtelte class”.

Hinzufügen dieser Zeilen zum Beispielcode der Frage:

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

beweist, dass der Name des Zeichenfolgentyps Sample.Program+Vegetable

CLILibrary.xml von ECMA-335 Partition IV enthält die endgültigen Details für diese Konvention. Die Type.GetType(string) in ECMA-335 ist mit der in der MSDN-Dokumentation verwendeten identisch.