1

我只是在尝试通过反射实例化 WebProxy 实例时遇到了这个奇怪的问题:

    Dim proxyType As Type = GetType(System.Net.WebProxy)
    MsgBox(proxyType.FullName)

    Dim reflProxyType As Type = Type.GetType(proxyType.FullName)
    MsgBox(reflProxyType.FullName) ' Here, reflProxyType is null => NullReferenceException

将第一行更改为其他系统命名空间(即 System.Text.StringBuilder 或 System.String)可以正常工作。

    Dim systemType As Type = GetType(System.Text.StringBuilder)
    MsgBox(systemType.FullName)

    Dim reflSystemType As Type = Type.GetType(systemType.FullName)
    MsgBox(reflSystemType.FullName) ' Here, everything works fine

这种行为有什么原因吗?我错过了什么吗?MS 是否对 System.dll 设置了一些限制?

4

1 回答 1

2

答案在MSDN 文档Type.GetType (string)

参数

typeName 类型:System.String

要获取的类型的程序集限定名称。请参阅 AssemblyQualifiedName。如果该类型在当前执行的程序集中或在 Mscorlib.dll 中,则提供由其命名空间限定的类型名称就足够了。

该类WebProxy位于System.dll中,而不是 Mscorlib.dll。因此,您必须:

  1. 提供程序集限定名称而不仅仅是完全限定名称。(或者)
  2. 使用Assembly.GetType(string)方法。
于 2012-09-27T14:14:50.143 回答