通过执行以下操作,我试图从System.Net.WebException的名称中获得对它的类型引用:
var t = Type.GetType("System.Net.WebException");t是null,我不明白为什么。我的项目是一个针对.NET 4.6.1的类库。我引用的是System,也尝试过引用System.Net和System.Web,没有任何运气。
以下内容编译并返回正确的类型:
var t = typeof(System.Net.WebException);但我需要string版本才能在这里工作。我也试过这个:
var t = Type.GetType("System.Net.WebException, System");还返回null。
有什么想法吗?
发布于 2019-11-23 09:09:19
根据文档 of Type.GetType,只有在类型在mscorlib.dll中时,才能传递名称空间限定类型名称,否则必须使用程序集限定名。WebException不在mscorlib.dll中,所以您至少需要:
Type.GetType("System.Net.WebException, System, Version=4.0.0.0")通过检查typeof(WebException).AssemblyQualifiedName,您可以看到以下内容:
System.Net.WebException, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089发布于 2019-11-23 09:09:21
你应该用这个:
var t = Type.GetType("System.Net.WebException" + ", System");你试过以下几种方法:
var t = Type.GetType("System.Net.WebException", true);您可能会收到以下错误消息:
未处理的异常。System.TypeLoadException:无法从程序集'ConsoleApp1,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null‘加载'System.Net.WebException’类型。在System.RuntimeTypeHandle.GetTypeByName(字符串名,布尔.
我们传递的第二个参数true表示,如果找不到该类型,我们希望这个方法调用抛出一个错误。因此,通过传递它,您将注意到Type.GetType需要完全限定的名称。更正式地说,这里
public static Type GetType (string typeName);参数
typeName String要获取的类型的程序集限定名称。见AssemblyQualifiedName。如果类型位于当前正在执行的程序集中或在Mscorlib.dll中,则提供由其命名空间限定的类型名称就足够了。
https://stackoverflow.com/questions/59006035
复制相似问题