[英]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.