我使用此函数来获取某些枚举的类型,来自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")
我得到了空
应该是什么问题?
答案 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
中的类型。