我們要如何取得 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
結果如下,
參考資料
Type.GetNestedTypes Method (BindingFlags)
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^