jueves, 18 de junio de 2009

.NET - Recorrer los elementos de un Enum

enum Tenemos un Enum:

Enum Roles
Administrador = 1
Usuario = 2
Auditor = 3
Invitado = 4

End Enum

y queremos recorrer o iterar por sus elementos… cómo lo hacemos?

en realidad es nada dificil, veamos 2 formas:

1.- Obtenemos los valores del Enum en un array, luego de eso iteramos por el array y ya tenemos todos los elementos:

Dim values As Array
values = System.Enum.GetValues(GetType(Roles))
Dim valuesString As New StringBuilder
For Each val As String In values
    valuesString.AppendFormat("{0},", val)
Next
Dim TotalValues As String = valuesString.ToString

Dim names As Array
names = System.Enum.GetNames(GetType(Roles))
Dim namesString As New StringBuilder
For Each name As String In names
    namesString.AppendFormat("{0},", name)
Next
Dim TotalNames As String = namesString.ToString

Para este caso, he tenido que crear dos arrays, uno para obtener los valores… y otro para sus nombres.

También pueden iterar de una sola vez, y obtener ambos datos… pero lo haremos usando Reflection… como se explica en la siguiente forma:

2.- Esta vez, lo que vamos a usar son las funcionalides del espacio de nombres System.Reflection… y de ella la clase FielInfo, que lo que hace es particionar alguna información y exponer dicha metadata.

Si desean saber más sobre FieldInfo, hagan click aquí

Para recorrer por cada uno de los elementos y recuperar su valor y nombre, usamos la siguiente rutina:

Dim enumValores As Reflection.FieldInfo() = GetType(Roles).GetFields()

For Each info As Reflection.FieldInfo In enumValores

If Not info.IsSpecialName Then
Dim val As Integer = info.GetValue(0)
Dim nom As String = info.Name
End If

Next info

Eso sería todo ;)

No hay comentarios.: