在很多地方我都遇到过以下形式的部分限定类型名称FullTypeName, AssemblyName
,即像Type.AssemblyQualifiedName
仅没有版本、区域性和 publicKeyToken 限定符。
我的问题是如何将其转换为相应的Type
以最小的努力?我以为Type.GetType
可以完成这项工作,但遗憾的是,它没有。例如,以下代码返回null
:
Type.GetType("System.Net.Sockets.SocketException, System");
当然,如果我指定完全限定名称,它确实有效:
Type.GetType("System.Net.Sockets.SocketException, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
多谢。
如果程序集已加载到当前域中,则下面的代码通常可以工作:
public static Type GetTypeEx(string fullTypeName)
{
return Type.GetType(fullTypeName) ??
AppDomain.CurrentDomain.GetAssemblies()
.Select(a => a.GetType(fullTypeName))
.FirstOrDefault(t => t != null);
}
你可以像这样使用它:
Type t = GetTypeEx("System.Net.Sockets.SocketException");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)