奇怪的问题,我得到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实现中,并且很难快速理解。
答案 0 :(得分:3)
Type.FullName
不包含程序集 - 因此,除非类型位于调用程序集或mscorlib
中,否则将无法找到它。
基本上,如果您尝试从任意程序集加载类型,则有两个简单的选项:
Type.GetType()
Assembly.GetType
如果你在编译时知道同一个程序集中的另一个类型,它通常最简单:
Type type = typeof(KnownType).Assembly.GetType("Qualified.UnknownType");