Type.GetType() bring null

本文关键字:bring null GetType Type | 更新日期: 2023-09-27 18:28:14

我使用这个函数,从字符串中获取一些枚举的类型:

当我把它用于类似Type.GetType("System.ConsoleColor")的系统枚举时,我得到了类型

但当我把它用于枚举whitch时,我声明了——就像一样

Type.GetType("SignalModule.Implementation.SubscriberType")

我的为空

当我尝试在即时窗口键入以下订单时:*

SignalModule.Implementation.SubscriberType

我得到了真相类型:

SignalModule.Implementation.SubscriberType EventSignalChange: EventSignalChange Polling: Polling *Type.GetType(SignalModule.Implementation.SubscriberType)

我得到了错误:

'SignalModule.Implementation.SubscriberType' is a 'type'

这在给定的上下文中是无效的

Type.GetType("SignalModule.Implementation.SubscriberType")

我的为空

问题出在哪里?

Type.GetType() bring null

您需要使用全名。例如,如果我创建了:

public class CarParts
{
  public string PartId { get; set; }
  public int PartCost { get; set; }

  public DataGridViewButtonCell Edit { get; set; }
}

在名为"WindowsFormsApplication5"的dll中

我想要我需要做的类型:

Type.GetType("WindowsFormsApplication5.CarParts, WindowsFormsApplication5, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")

获取类型

知道全名的最简单方法是获取所需类的实例,获取GetType并获取Type类实例。查看AssemblyQualifiedName属性

既然看起来有问题的类型是公共的并且在范围内,为什么不简单地使用:

typeof(SignalModule.Implementation.SubscriberType)

相反?使用适当的using指令,它甚至可以简化为typeof(SubscriberType)

静态GetType(string)方法的问题是,您需要为类型的繁琐程序集赋予限定名,除非该类型恰好在特定程序集中mscorlib中。有关详细信息,请阅读该方法的文档页面。

如果类型不在作用域中,例如因为它不是来自当前程序集并且不是公共的,或者如果不能引用程序集,则必须使用GetType(string)

详述Jeppe Stig Nielsen所写的内容,如果你真的需要按名称获取类型,还有另一条路:

Type type = typeof(SomeTypeInTheSameAssemblyAsYourType).Assembly
               .GetType("SignalModule.Implementation.SubscriberType")

Assembly.GetType(string)清楚地搜索所选Assembly中的类型。