我正打算打电话
Type.GetType("System.Diagnostics.TraceFilter")
不是typeof(System.Diagnostics.TraceFilter)
但结果始终为null。任何人都可以帮我吗?如何获得这个抽象类的类类型?
答案 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)
根据MSDN,Type.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;
}