为什么GetType()无法识别此类型?

时间:2018-03-16 10:51:27

标签: c# types

这是code

dplyr

当它尝试获取public class Program { public static void Main(string[] args) { Test test = new Test(); } } public class Test { public Test() { Console.WriteLine("type: " + Type.GetType("Registration")); } } public class Registration { public int mAge; public string mName; public Registration() {} } 的类型时,它返回null。因此无法访问Registration.Name

仅当.AssemblyQualifiedName未返回AssemblyQualifiedName时,我才能提供GetType()

为什么null返回null?希望问题很清楚。

4 个答案:

答案 0 :(得分:7)

工作正常。如果它不适合你,那么可能有一个名称空间,在这种情况下你需要"TheNamespace.Registration"。如果类型位于不同的程序集中,则还需要指定 ;最可靠的字符串版本是类型的AssemblyQualifiedName - 可能类似于"Registration, ConsoleApp48, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",如果涉及到强名,则更长。

但是,typeof(Registration)任何这些选项更容易。

答案 1 :(得分:4)

您需要指定“程序集限定”类型名称:

Type.GetType("YourNameSpace.Registration");

正如documentation所述:

  

的typeName      键入:System.String

     

要获取的类型的程序集限定名称。看到     AssemblyQualifiedName。如果类型在当前     执行程序集或在Mscorlib.dll中,它足以提供   类型名称由其命名空间限定。

答案 2 :(得分:3)

您需要指定类型的全名,包括命名空间:

Console.WriteLine("type: " + Type.GetType("Rextester.Registration")); 

或者 - 取决于你想要做什么:

Console.WriteLine("type: " + typeof(Registration)); 

答案 3 :(得分:0)

我认为您需要定义类的完整命名空间路径,例如TestNamespace.Registration