.NET中的GetType反射不起作用

时间:2010-07-31 15:43:55

标签: .net

我正打算打电话

Type.GetType("System.Diagnostics.TraceFilter")

不是typeof(System.Diagnostics.TraceFilter)

但结果始终为null。任何人都可以帮我吗?如何获得这个抽象类的类类型?

4 个答案:

答案 0 :(得分:6)

从Type.GetType(字符串typeName)

的文档中
  

要获取的类型的程序集限定名称。请参阅AssemblyQualifiedName。如果类型在当前正在执行的程序集中或在Mscorlib.dll中,则提供由其名称空间限定的类型名称就足够了。

您正在钓鱼的类型(即“System.Diagnostics.TraceFilter”)不在当前正在执行的程序集中或“Mscorlib.dll”中,它实际上位于“System.dll”中。因此,您必须使用完全限定的程序集名称,例如:

 Type type = Type.GetType("System.Diagnostics.TraceFilter, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");

或者您也可以使用:

 Type type = typeof(System.Diagnostics.TraceFilter);

答案 1 :(得分:2)

这可能是因为您必须提供一个程序集限定名称。

但是,更好的方法是使用它:

typeof(System.Diagnostics.TraceFilter)

答案 2 :(得分:1)

根据MSDNType.GetType(string) 需要一个程序集限定名称,除非目标类型位于当前正在执行的程序集或mscorlib.dll中。 System.Diagnostics.TraceFilter位于System.dll中,这意味着您必须使用程序集限定名称。

答案 3 :(得分:0)

有时即使加载了正确的程序集,也无法像预期的那样使用反射。 在使用MEF或Unity等注入框架时经常会发生这种情况。 如果typeof()运算符不是一个选项而Type.GetType()失败,那么这个函数通常可以解决这个问题:

public static Type GetTypeEx(string fullTypeName)
{
 Type type = Type.GetType(fullTypeName);
 if (type != null)
     return type;

 foreach (System.Reflection.Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
 {
     Type t2 = assembly.GetType(fullTypeName);
     if (t2 != null)
         return t2;
 }
 return null;
}