Type.GetType()带来null

时间:2013-08-20 06:27:41

标签: c# types

我使用此函数来获取某些枚举的类型,来自string:

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

但当我将它用于enum 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")

我得到了空

应该是什么问题?

3 个答案:

答案 0 :(得分:4)

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

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


  public DataGridViewButtonCell Edit { get; set; }
}

在dll中命名为“WindowsFormsApplication5”

我希望它是我需要做的类型:

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

获取类型

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

答案 1 :(得分:2)

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

typeof(SignalModule.Implementation.SubscriberType)

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

静态GetType(string)方法的问题在于,您需要提供类型的繁琐的程序集限定名称,除非类型恰好位于特定程序集mscorlib。请阅读the doc page for that method以获取更多信息。

如果类型不在范围内,例如因为它不是来自当前程序集而不是公共程序,或者如果您不能引用程序集,则必须使用GetType(string)

答案 2 :(得分:2)

在阐述Jeppe Stig Nielsen写的内容时,如果你真的需要按名称获得类型,还有另一条道路:

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

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