为什么Type.GetType给出null?

时间:2011-11-16 20:48:21

标签: c# winforms visual-studio-2005

  

可能重复:
  When does Assembly.GetType(name) return null?

在我的项目中,我有一个名为'BaseSystem'的基类,并且派生类'RoundedTree'。下面显示的代码'type'对于派生类'RoundedTree'变为null,对于baseclass'BaseSystem',它给出'{Name = "BaseSystem" FullName = "Root.SystemModel.BaseSystem"}'。我拥有的DLL是Root.SystemModel.dll及其版本i可以在反思中看到3.6.7.8 “类型”背后的原因是什么?来源

public static Type ToType(UserType usedType)
      {

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

1 个答案:

答案 0 :(得分:5)

如果你只给它命名空间限定的类型名称(而不是程序集限定的名称),那么

Type.GetType(string)将返回null,并且类型在mscorlib以外的程序集中,而当前正在执行的程序集中

来自文档:

  

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

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

  • 获取相关Assembly的引用并致电Assembly.GetType(string)
  • 将程序集限定的类型名称提供给Type.GetType(string)