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")
我的为空
问题出在哪里?
您需要使用全名。例如,如果我创建了:
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
中的类型。