在很多地方,我遇到了表单的部分限定类型名称FullTypeName, AssemblyName
,即Type.AssemblyQualifiedName
只有没有版本,culture和publicKeyToken限定符.
我的问题是如何Type
以最小的努力将其转换为相应的?我认为这样Type.GetType
做,但唉,事实并非如此.例如,以下代码返回null
:
Type.GetType("System.Net.Sockets.SocketException, System");
Run Code Online (Sandbox Code Playgroud)
当然,如果我指定完全限定名称,它确实有效:
Type.GetType("System.Net.Sockets.SocketException, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
Run Code Online (Sandbox Code Playgroud)
非常感谢.
dmi*_*scu 31
如果程序集已加载到当前域中,则下面的代码通常有效:
public static Type GetTypeEx(string fullTypeName)
{
return Type.GetType(fullTypeName) ??
AppDomain.CurrentDomain.GetAssemblies()
.Select(a => a.GetType(fullTypeName))
.FirstOrDefault(t => t != null);
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样使用它:
Type t = GetTypeEx("System.Net.Sockets.SocketException");
Run Code Online (Sandbox Code Playgroud)
如果它所在的DLL尚未加载到应用程序域中(例如,您使用它),则需要这样的完整路径,如果它已经加载,则可以使用较短的版本找到它.
回答你的问题:第二个版本总是有效,坚持下去,你有一种方法可以担心.
归档时间: |
|
查看次数: |
8543 次 |
最近记录: |