[.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

结果如下,

扫描二维码关注公众号,回复: 7257362 查看本文章

参考数据

枚举 ENUM 名称 寻找问题

Type.GetNestedTypes Method (BindingFlags)

原文:大专栏  [.NET]取得 Class 中所有的 Enum 并列出它们的 Name 及 Value


猜你喜欢

转载自www.cnblogs.com/chinatrump/p/11505593.html