Type.GetType返回null

时间:2011-09-02 12:59:44

标签: c# gettype

我正在尝试使用Type.GetType并传递“caLibClient.entity.Web2ImageEntity”完整的类名。 caLibClient.entity是名称空间,位于分离的程序集(caLibClient)中,并添加到程序引用程序集列表中。当我从程序中调用它时,Type.GetType总是返回Null,这有什么问题?

4 个答案:

答案 0 :(得分:25)

您还需要添加程序集名称,因为您的类型不在执行程序集中(也不是mscorlib)。因此调用应该是:

var myType = Type.GetType("caLibClient.entity.Web2ImageEntity, FullAssemblyName");

来自Type.GetType() docs

  

<强>的typeName
      输入System.String
      要获取的类型的程序集限定名称。看到   AssemblyQualifiedName。如果类型在当前正在执行   汇编或在Mscorlib.dll中,提供类型名称就足够了   由其命名空间限定。

docs for AssemblyQualifiedName开始,这是一个示例名称:

TopNamespace.SubNameSpace.ContainingClass+NestedClass, MyAssembly, Version=1.3.0.0, Culture=neutral, PublicKeyToken=b17a5c561934e089

更新:如果您已经在项目中引用程序集,并且在编译时知道类型名称是什么,那么最好说

Type myType = typeof(caLibClient.entity.Web2ImageEntity);

因为现在您不需要在运行时搜索该类型;编译器会为你做一切。

答案 1 :(得分:2)

根据Assembly qualified name

,尝试Type.GetType("caLibClient.entity.Web2ImageEntity, caLibClient")

答案 2 :(得分:1)

你需要传递一个assembly qualified name,在这种情况下是这样的:

var yourType = Type.GetType("caLibClient.entity.Web2ImageEntity,caLibClient");

答案 3 :(得分:1)

如果您知道目标类型所在的程序集中的类型,则可以避免对完整程序集限定名称进行硬编码。例如:

Type.GetType(
    "MyAssembly.Foo.BarSubclass, " + typeof(MyAssembly.Foo.IBar).Assembly.FullName)