2

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

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

但是当我将它用于枚举时,我声明-就像

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")

我得到了空

应该是什么问题?

4

3 回答 3

4

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

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看房_

于 2013-08-20T06:32:41.723 回答
2

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

typeof(SignalModule.Implementation.SubscriberType)

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

静态方法的问题在于,除非该类型恰好在特定的程序集中,否则GetType(string)您需要为类型提供繁琐的程序集限定名称。阅读该方法的文档页面以获取更多信息。mscorlib

如果类型不在范围内,例如因为它不是来自当前程序集且不是公共的,或者如果您无法引用程序集,那么您必须使用GetType(string).

于 2013-08-20T06:43:27.233 回答
2

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

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

在选中的Assembly.GetType(string)类型中明确搜索Assembly

于 2013-08-20T07:00:46.820 回答