【问题标题】:Error creating runtime object of type System.Drawing.Point创建 System.Drawing.Point 类型的运行时对象时出错
【发布时间】:2013-07-23 20:57:09
【问题描述】:

我想在运行时创建一个System.Drawing.Point 类型的对象,我尝试使用下面的代码:

String typename = "System.Drawing.Point";
Type tp = Type.GetType(typename);
Object instance = Activator.CreateInstance(tp);

但我总是得到tp == null。但是,例如,如果我使用 System.Double 一切正常。

【问题讨论】:

  • System.Drawing.dll 加载了吗?
  • 这是用于什么平台的?例如,Silverlight 无权访问该类型。
  • 无论如何,我相信类型名必须是程序集限定的。
  • @J.Steen:取决于平台。对于完整的 .NET,您只需使用全名即可。在 Core-CLR(如 Silverlight)上,您需要组装限定名称。
  • @ChrisSinclair 刚刚在完整的 .NET 中尝试过。没有装配资格就不能工作。

标签: c# gettype


【解决方案1】:

Type.GetType 将尝试从 mscorlib 加载类型。使用类型的程序集限定名称。

String typename = "System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a";

Type tp = Type.GetType(typename);

【讨论】:

  • 包含版本信息可能更谨慎,即使并非绝对需要使代码正常工作。 +1。 =)
  • 您到底是从哪里获得 PublicKeyToken 值的?它是 b03f5f7f11d50a3a。
  • @HansPassant 这不是……它说的吗?
  • 之前说了点别的 :) 还是很好奇他从哪里得到 b1... 值。
【解决方案2】:

你需要qualify the assembly in your type name,所以

String typename = "System.Drawing.Point, System.Drawing";

将起作用(如果引用并加载了 System.Drawing.dll)。

类型名称

类型:System.String

要获取的类型的程序集限定名称。 [..] 如果类型在当前执行的程序集中或 Mscorlib.dll 中,则提供由其命名空间限定的类型名称就足够了。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多