9

のような完全修飾名を持つ新しいクラスを作成できますNamespace.OuterClass.NestedClass。しかし、 return で型を取得しようとしてい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パーティション IV に関連付けられている CLILibrary.xml は、この規則の決定的な詳細を提供します。ECMA-335のType.GetType(string)構文テーブルは、MSDN ドキュメントで使用されているものと同じです。

于 2013-09-27T15:50:15.377 に答える