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 0 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
×
Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

安裝 Angular CLI 之路
【Domain Model】從 PPAP 牽拖 Recursive Pattern

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
2025年10月08日, 星期三

Captcha 圖像