[.NET]取得 Class 中所有的 Enum 並列出它們的 Name 及 Value

我們要如何取得 Class 中「所有的」 Enum 呢?

測試 Class  (VB.NET) 如下,

Public Class classEnumAll

    Enum TypeA As Integer
        A1 = -1
        A2 = 1
        A3 = 2

    End Enum

    Enum TypeB As Integer
        B1 = -1
        B2 = 1
        B3 = 2

    End Enum

    Private prop1 As String
    Public Property NewProperty() As String
        Get
            Return prop1
        End Get
        Set(ByVal value As String)
            prop1 = value
        End Set
    End Property

    Function MyFunc() As Integer

        Return 0
    End Function
End Class

那 Class 中的 Enum 是屬性嗎? 是 Field 嗎?

它是 Nested Type,如下,

所以要取得 Class 中的 Enum ,就先取得 Class 中所有的 Nested Type,

然後再判斷它們是不是 Enum 就可以了,最後再 List 出 Enum 中的 Name 及 Value ,如下,

C#

var enumTypes = typeof(classEnumAll).GetNestedTypes(BindingFlags.Public);
var pubEnums = enumTypes.Where(t => t.IsEnum);
foreach(var enumType in enumTypes)
{
	var enumNames = enumType.GetEnumNames();
	foreach(var name in enumNames)
		Console.WriteLine($"EnumName:{enumType.Name}, Name:{name}");

	var enumValues = enumType.GetEnumValues();
	foreach (var value in enumValues)
		Console.WriteLine($"EnumName:{enumType.Name}, Value:{(int)value}");
}

VB.NET

Dim enumTypes =GetType(classEnumAll).GetNestedTypes(BindingFlags.Public)
Dim pubEnums = enumTypes.Where((Function(t As Type) t.IsEnum ))
For Each enumType In enumTypes
	Dim enumNames = enumType.GetEnumNames
	For Each name In enumNames
		Console.WriteLine("EnumName:{0}, Name:{1}" , enumType.Name, name)
	Next
	Dim enumValues = enumType.GetEnumValues
	For Each value In enumValues
		Console.WriteLine("EnumName:{0}, Value:{1}" , enumType.Name, Convert.ToInt16(value))
	Next
Next

結果如下,

參考資料

列舉 ENUM 名稱 尋找問題

Type.GetNestedTypes Method (BindingFlags)

本文也發表於亂馬客Blog

作者: 亂馬客

亂馬客 @叡揚資訊 rainmaker_ho@gss.com.tw https://rainmakerhoblog.wordpress.com https://www.slideshare.net/rainmakerho

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *