奇怪的问题,我得到系统。typeloadeexception "Could not load type 'Color ":
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实现的,很难快速理解。
Type.FullName
不包括程序集-所以除非类型在调用程序集或mscorlib
中,否则它将无法找到。
- 在
Type.GetType()
中使用程序集限定名 - 使用
Assembly.GetType
如果在编译时知道同一程序集中的另一种类型,通常最简单的方法是:
Type type = typeof(KnownType).Assembly.GetType("Qualified.UnknownType");