Как составить список участников Enum - PullRequest
18 голосов
/ 07 июня 2011

Как перечислить членов Enum в коде? У меня есть следующие Enum:

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

И я пытаюсь перечислить всех членов 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

Итак, мой вопрос: как составить список членов Enum?

Обновление : Решение:

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

Ответы [ 4 ]

17 голосов
/ 29 июня 2014

Вы можете просто перебрать все значения следующим образом:

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
15 голосов
/ 07 июня 2011

В метод необходимо передать тип, а не значение.

Members = System.Enum.GetNames(GetType(TestEnum))

Если у вас есть экземпляр вашего enum, вы также можете использовать

Members = System.Enum.GetNames(Enum1.GetType())

Хотя я бы порекомендовал первый подход, если вы знаете тип, который вы хотите.

8 голосов
/ 07 июня 2011

Вы смотрели на Enum.GetValues ​​?

Редактировать: Чтобы уточнить, да, вам нужно передать тип, а не экземпляр перечисления в любой метод.

Enum.GetNames(GetType(TestEnum))
3 голосов
/ 12 февраля 2018

Я использовал Джордж Филиппакос, ответ , поскольку я хотел знать, как перебирать значения 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

Вывод:

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

Name: First, Value: 1
Name: Second, Value: 2
Name: Third, Value: 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...