2009-05-12 5 views
51

VB.NETで文字列を列挙して値を列挙するにはどうすればよいですか?VB.NETでEnum値に文字列をパースする

例私はこの列挙を持っている:

Public Enum Gender 
    NotDefined 
    Male 
    Female 
End Enum 

は、どのように私はGender enumのMale値に文字列 "男性" を変換することができますか?

答えて

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

タイプがわからず、一般的に変換したい場合はどうすればいいですか?この例では 'Male'を指定しました。私はデータベースに列挙型の値を保存し、それを元に戻そうとしています。この場合、私はtoStringを変換して以来保存した実際の値を知らないかもしれません。 – Smith

+0

関連するEnum型を "Namespaces.EnumName"という値で保存する必要があります。リフレクションを使用して名前でTypeオブジェクトを取得すると、Dim t = Type.GetType( "Namespaces.EnumName")、 'GetType(Gender)'ではなく 't'を渡すことができます。また、結果の値をキャストする必要があります。これを行うには、コードを記述する際に特定の列挙型を知っている必要があります。 – Kamarey

+2

.NET 4.0では構文は単純です: 'Parse(EnumType As System.Type、value As String)As Object' – motto

18

Enum.TryParseを参照してください。私は性別列挙の男性値に文字列「男性」を変換することができますどのように

+0

Parse()メソッドのみがあります。 Enum.TryParse()メソッドはどこにありますか? –

+10

@David:Enum.TryParse()は.NET 4 –

+1

で利用可能です。正しいリンクです。答えは30文字以内で編集できません:http://msdn.microsoft.com/en-us/library/dd783499 .aspx –

2

受け入れられるソリューションは、Enumオブジェクトを返します。

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

もそれを行うことができますこの方法:あなたはこのソリューションをしたい値に戻すためにあなたは、解析は大文字と小文字を区別したい場合は

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

すると、次を使用することができます。

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

これは処理されますdim MyGender as string = "Male"またはdim MyGender as string = "male"

関連する問題