尽管此类型存在并且已加载,但无法通过全名获取类型

时间:2014-08-08 10:07:31

标签: c# reflection mono unity3d

奇怪的问题,我得到System.TypeLoadException"无法加载类型'颜色'":

using UnityEngine;

Type.GetType(typeof(Color).FullName, true);

当然,我不能只使用typeof(Color),代码表明此类型存在且已加载且其名称正确。

typeof(Color).FullName ==" UnityEngine.Color"。

我也尝试过:

typeof(Color).Module.GetTypes().First(t => t.Name == "Color")

工作正常,但

typeof(Color).Module.GetType("Color", true, false)

抛出TypeLoadException。所以我得出结论,它不是一个完全合格的名字"问题,但别的东西。

我还尝试了UnityEngine程序集和其他第三方程序集中的其他类型。

我检查了Mono源代码,但相关代码是在C实现中,并且很难快速理解。

1 个答案:

答案 0 :(得分:3)

Type.FullName不包含程序集 - 因此,除非类型位于调用程序集或mscorlib中,否则将无法找到它。

基本上,如果您尝试从任意程序集加载类型,则有两个简单的选项:

  • Type.GetType()
  • 中使用程序集限定名称
  • 使用Assembly.GetType

如果你在编译时知道同一个程序集中的另一个类型,它通常最简单:

Type type = typeof(KnownType).Assembly.GetType("Qualified.UnknownType");