我刚刚注意到函数中的一个错误:
Type.GetType("System.Uri");
Run Code Online (Sandbox Code Playgroud)
返回值为null,而以下函数运行良好...
Type.GetType("System.string");
Type.GetType("System.bool");
Type.GetType("System.DateTime");
Run Code Online (Sandbox Code Playgroud)
...
任何人都知道,为什么返回的Type为null?
编辑:删除Uri双重进入...
the*_*yer 16
Type.GetType("System.Uri")
返回的原因null
是类型位于system.dll而不是mscorlib.dll.您必须使用上面提到的程序集限定名称.
来自MSDN:
typeName 类型:System.String
要获取的类型的程序集限定名称.请参阅AssemblyQualifiedName.如果类型在当前正在执行的程序集中或在Mscorlib.dll中,则提供由其名称空间限定的类型名称就足够了.
小智 10
我也遇到了这个问题,并意识到,特别是在使用JIT编译的ASP.Net中,我并不总是知道汇编信息.我在ReflectionUtilities类中添加了以下内容.它在某种程度上是"破解坚果"的"大锤",但它适用于AssemblyQualifiedName和基本类FullName.第一个基本上是对CurrentDomainAssemblies的搜索进行短路,否则必须进行搜索.
public static Type FindType(string qualifiedTypeName)
{
Type t = Type.GetType(qualifiedTypeName);
if (t != null)
{
return t;
}
else
{
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
{
t = asm.GetType(qualifiedTypeName);
if (t != null)
return t;
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
注意:鉴于反射性能问题,如果可能的话,不应在没有装配限定的情况下调用内部循环.最好访问您需要的第一个项目,从中提取装配信息,然后从那里继续.并不总是合适但效率更高(如果反射中的任何内容都可以称为高效:-)).
阿利斯泰尔
归档时间: |
|
查看次数: |
19475 次 |
最近记录: |