2009-05-12 17 views
51

¿Cómo puedo analizar una cadena en VB.NET para poner en valor?Analizar una cadena a un valor Enum en VB.NET

Ejemplo tengo esta enumeración:

Public Enum Gender 
    NotDefined 
    Male 
    Female 
End Enum 

¿Cómo puedo convertir una cadena "macho" para el valor de enumeración GenderMale?

Respuesta

104
Dim val = DirectCast([Enum].Parse(GetType(Gender), "Male"), Gender) 
+0

¿Qué sucede si no sé el tipo y quiero convertir en general? en este ejemplo especificó 'Hombre'. Guardé el valor enum en la base de datos y estoy tratando de recuperarlo. en este caso, es posible que no sepa el valor real que guardé desde que estoy convirtiendo a String – Smith

+0

Debe guardar el tipo Enum relacionado con el valor, diga "Namespaces.EnumName". Después de poder usar la reflexión para obtener el objeto Tipo por nombre: Dim t = Tipo.GetType ("Namespaces.EnumName") y pase la 't' en lugar de 'GetType (Género)'. También deberás lanzar el valor del resultado. Para hacerlo, debe conocer el tipo de enumeración específico al escribir el código. – Kamarey

+2

En .NET 4.0, la sintaxis es simplemente: 'Parse (enumType As System.Type, value As String) As Object' – motto

18
+0

Sólo hay método Parse(). ¿No está seguro de dónde está el método Enum.TryParse()? –

+10

@David: Enum.TryParse() está disponible en .NET 4 –

+1

enlace correcto, no se puede editar la respuesta ya que tiene menos de 30 caracteres: http://msdn.microsoft.com/en-us/library/dd783499 .aspx –

2

cómo puedo convertir una cadena "macho" a valor masculino de la enumeración de género?

La solución aceptada devuelve un objeto Enum. Para devolver el valor que desea esta solución:

dim MyGender as string = "Male" 
dim Value as integer 
Value = DirectCast([Enum].Parse(GetType(Gender), MyGender), Integer) 

También puede hacerlo de esta manera:

value = cInt([enum].Parse(GetType(Gender), MyGender)) 
0

Si desea que el análisis sintáctico para ser sensible a mayúsculas, puede utilizar el siguiente:

[Enum].Parse(Gender, DirectCast(MyGender, String), True) 

Esto manejar dim MyGender as string = "Male" o dim MyGender as string = "male"