選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
2 分鐘閱讀時間 (301 個字)

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

unsplash-coding086


我們要如何取得 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 End FunctionEnd 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))
NextNext
結果如下,


參考資料

列舉 ENUM 名稱 尋找問題
Type.GetNestedTypes Method (BindingFlags)
本文也發表於亂馬客Blog
安裝 Angular CLI 之路
【Domain Model】從 PPAP 牽拖 Recursive Pattern

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/06, 週一

Captcha 圖像