如何列出Enum的成员

use*_*411 18 vb.net enums

如何在代码中列出Enum的成员?我跟随Enum:

Public Enum TestEnum As int32
    First = 0
    Second = 2
    Third = 4
    Fourth = 6
End Enum
Run Code Online (Sandbox Code Playgroud)

我尝试通过以下代码列出TestEnum的所有成员但它失败了:

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim Enum1 As TestEnum

        Dim Members() As String

        Members = System.Enum.GetNames(CType(Enum1, System.Enum))


    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:如何列出枚举的成员?

更新:解决方案是:

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim Members() As String
        Members = System.Enum.GetNames(GetType(TestEnum))

        MessageBox.Show(Join(Members, Chr(13) & Chr(10)))

    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

Geo*_*kos 19

您可以简单地遍历所有值,如下所示:

Public Enum TestEnum As int32
    First = 0
    Second = 2
    Third = 4
    Fourth = 6
End Enum

For Each tstEnum As TestEnum In System.Enum.GetValues(GetType(TestEnum))

    Response.Write(
        String.Format("Name: {0}  Value: {1}", 
            tstEnum.ToString, 
            CInt(tstEnum).ToString
        )
    )

Next
Run Code Online (Sandbox Code Playgroud)


Sve*_*ven 16

您需要将类型而不是值传递给方法.

Members = System.Enum.GetNames(GetType(TestEnum))
Run Code Online (Sandbox Code Playgroud)

如果您有枚举实例,也可以使用

Members = System.Enum.GetNames(Enum1.GetType())
Run Code Online (Sandbox Code Playgroud)

虽然如果你知道你想要的类型,我会推荐第一种方法.


Bra*_*etz 8

你看过Enum.GetValues了吗?

编辑:澄清一下,是的,你需要将一个Type而不是枚举的实例传递给任一方法.

Enum.GetNames(GetType(TestEnum))
Run Code Online (Sandbox Code Playgroud)


Pau*_*ram 6

因为我想知道如何迭代值,所以我使用了George Filippakos 的答案Enum

我也发现了,你可以用做Type.GetEnumValues因为这已面世.NET Framework 4.0

以下是您可以用来遍历Enum值的两种方法:

Module Module1
    Sub Main()
        For Each tstEnum As TestEnum In System.Enum.GetValues(GetType(TestEnum))
            Console.WriteLine($"Name: {tstEnum.ToString}, Value: {CType(tstEnum, Integer)}")
        Next

        Console.WriteLine(Environment.NewLine)

        For Each tstEnum As TestEnum In GetType(TestEnum).GetEnumValues
            Console.WriteLine($"Name: {tstEnum.ToString}, Value: {CType(tstEnum, Integer)}")
        Next

        Console.ReadKey()
    End Sub

    Public Enum TestEnum
        First = 1
        Second = 2
        Third = 3
    End Enum
End Module
Run Code Online (Sandbox Code Playgroud)

输出:

Name: First, Value: 1
Name: Second, Value: 2
Name: Third, Value: 3

Name: First, Value: 1
Name: Second, Value: 2
Name: Third, Value: 3
Run Code Online (Sandbox Code Playgroud)