我有这种Enum类型:
namespace foo.bar
{
public enum MyEnum: byte
{
...
}
}
当我尝试获取其类型时,我使用:
Dim t As Type = Type.GetType("foo.bar.MyEnum")
我得到t =什么都没有!!
答案 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