2017-04-18 14 views
0

任意の列挙型のメンバーをリストしたいと思います。その名前がStringの場合、列挙型のリストを取得したり、その名前から列挙型を取得する方法はありますか?アクティブにする列挙型

なぜですか?アイデアは、選択した列挙体のメンバーをWindowsフォームに一覧表示することです。特定の列挙名は、TextBoxにその名前を入力することでノミネートされるかもしれません。これはStringからEnumerationオブジェクトを取得する方法を必要としますが、VB.netはこれをサポートしていません。あるいは、EnumerationをActive Enumerationsのリストから選択することもできます。 VB.Netには非常に多くの列挙体があり、リストのアイデアはおそらくEnumの名前のリストを現在のアプリケーションで使用されているものに限定する必要があるでしょう。そのようなリストは取り出せますか?

enumTypeNameはタイプ
(たとえば AssemblyName.YourEnum用)の「フルネーム」であれば上記のコードは動作します
+0

Y ouはその名前で型を得ることができます - 'Type.GetType(nameOfSelectedType)' 'nameOfSelectedType'は文字列です。 – Fabio

+2

あなたの本当の目標は何ですか?平均的なエ​​ンドユーザが.Netの 'Enum'型の名前を知っているか、知っているか、知りたがっているのかを想像することはできません。あなたの質問のタイトルは「アクティブな列挙」です。どのように "アクティブ列挙"を定義しますか? – TnTinMn

+1

これは奇妙な要求だと私は同意しますが、尋ねられたように質問に答えるために、@ Fabioが提案するように 'Type'オブジェクトを取得し、それを' Enum.GetNames'メソッドまたは 'Enum.GetValues'メソッドに渡すことができます。 – jmcilhinney

答えて

0
Dim enumType As Type = Type.GetType(enumTypeName) 
Dim names = System.Enum.GetNames(enumType) 'working 

Dim enumTypeFullName As String = GetType(YourEnum).FullName 
Dim enumType As Type = Type.GetType(enumTypeName) 
Dim names = System.Enum.GetNames(enumType) 'working 

だから、列挙型の名前を入力するためのテキストボックスを使用している場合、あなたは必要とします列挙型のフルネームを入力するか、または指定された列挙型名を検索できる定義済みの名前空間を使用することを検討してください。

Function GetNamesByEnumTypeName(enumName As String) As IEnumerable(Of String) 
    Dim namespaces = New List(Of String) From 
    { 
     "Microsoft.VisualBasic", 
     "System" 
    } 

    Dim foundedTypes = namespaces.Select(Function(ns) $"{ns}.{enumName}"). 
            Select(Function(fullName) Type.GetType(fullName)). 
            Where(Function(enumType) enumType IsNot Nothing) 

    For Each foundedType In foundedTypes 
     Return System.Enum.GetNames(foundedType) 
    Next 

    Return Enumerable.Empty(Of String) 
End Function