VB Type.GetType(“”)不返回任何内容

时间:2018-12-18 17:13:25

标签: vb.net

我有这种Enum类型:

namespace foo.bar
{
  public enum MyEnum: byte
  {
...
  }
}

当我尝试获取其类型时,我使用:

Dim t As Type = Type.GetType("foo.bar.MyEnum")

我得到t =什么都没有!!

4 个答案:

答案 0 :(得分:3)

也许您缺少根名称空间。只需从实际枚举中获取类型,这将为您提供字符串值。

GetType(MyEnum).ToString()

从一个简单的例子中,我得到了。

Type.GetType("ConsoleApplication1.Module1+MyEnum").ToString()

答案 1 :(得分:1)

Type.GetType("namespace.a.b.ClassName") returns null

因此,Type.GetType(..)仅在mscorlib.dll或当前正在执行的程序集中找到类型时有效。

因此您需要使用:

Type.GetType("foo.bar.MyEnum,ClassLibrary1")

用包含枚举的库名替换“ ClassLibrary1”,然后它应该可以工作。

答案 2 :(得分:1)

除了其他答案,这是实现您所需要的另一种方式。

说,您的C#项目具有名称空间ConsoleNET,并产生ConsoleNET.dll。在这里定义了枚举:

namespace foo.bar
{
    public enum MyEnum : byte { One, Two }
}

您的VB.NET项目引用了此C#项目。您可以通过加载此库(仅用于反射)来调查其中的类型:

Sub Main()
    Dim asm = Assembly.ReflectionOnlyLoad("ConsoleNET")
    Dim t = asm.GetType("foo.bar.MyEnum")
    If t Is Nothing Then
        Console.WriteLine("t is nothing")
    Else
        Console.WriteLine("t is not nothing")
    End If
End Sub
'Output: t is not nothing

答案 3 :(得分:0)

如其他人所述,您可能未使用完全限定的类型名称。我认为您缺少组装规范。要获得类型,您必须提供“装配合格名称”:

  

要获取的程序集限定名称。参见AssemblyQualifiedName。如果类型在当前执行的程序集中或在Mscorlib.dll中,则只需提供其名称空间限定的类型名称即可。

因此,在您的情况下,它将类似于以下内容:

data