为什么Type.GetType给出null

本文关键字:null 给出 GetType Type 为什么 | 更新日期: 2023-09-27 18:14:47

可能重复:
Assembly.GetType(name)何时返回null

在我的项目中,我有一个名为"BaseSystem"的基类,并派生了类"RoundedTree"。对于派生类"RounddTree"和基类"BaseSystem",下面显示的代码'type'变为null,它给出为"{Name = "BaseSystem" FullName = "Root.SystemModel.BaseSystem"}'"。我拥有的DLL是Root.SystemModel.DLL,它的版本可以在反射中看到为3.6.7.8对于经过验证的类,"type"变为null的原因是什么

public static Type ToType(UserType usedType)
      {
         Type type = null;
         if (usedTypeType != null
            && usedTypeType.Name != string.Empty)
         {
            type = Type.GetType(usedType.Name); 

为什么Type.GetType给出null

Type.GetType(string)将返回null,如果您只为其提供命名空间限定的类型名称(而不是程序集限定的名称(,并且该类型位于mscorlib和当前执行的程序集之外的程序集中。

来自文档:

如果typeName包含命名空间而不包含程序集名称,则此方法仅按顺序搜索调用对象的程序集和Mscorlib.dll。如果typeName使用部分或完整程序集名称完全限定,则此方法将在指定的程序集中搜索。如果程序集具有强名称,则需要完整的程序集名称。

假设您的类型与调用类型在不同的程序集中,则选项为:

  • 获取有问题的Assembly的参考,并致电Assembly.GetType(string)
  • Type.GetType(string)提供程序集限定的类型名称