繁体   English   中英

.NET反射中的GetType不起作用

[英]GetType in .NET Reflection does not work

我正在尝试打电话

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

不是typeof(System.Diagnostics.TraceFilter)

但结果始终为null。 有人可以帮我吗? 如何获取此抽象类的类类型?

从Type.GetType(string 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);

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

更好的方法是改用以下方法:

typeof(System.Diagnostics.TraceFilter)

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

有时,即使正确的程序集已加载,您也无法按预期使用反射。 使用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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM