如何遍历C#嵌套类获取各嵌套类的字段信息?
遍历嵌套类获取字段信息的正确实现
你的代码无法获取字段内容,核心问题是错误获取了成员的类型:你调用property.GetType()拿到的是MemberInfo自身的类型,而非嵌套类的实际类型。Permissions中的Aircraft、TripRecord是嵌套静态类,属于Type类型的成员,需要先定位到这些嵌套类的Type对象,再读取其字段。
正确实现代码
var permissionType = typeof(Permissions); // 直接获取Permissions下的所有公共静态嵌套类 var nestedTypes = permissionType.GetNestedTypes(BindingFlags.Public | BindingFlags.Static); foreach (var nestedType in nestedTypes) { // 获取当前嵌套类的所有公共静态字段 var fields = nestedType.GetFields(BindingFlags.Public | BindingFlags.Static); foreach (var field in fields) { // const常量字段传null即可获取值 var fieldValue = field.GetValue(null)?.ToString(); Console.WriteLine(fieldValue); } }
代码说明
- 精准筛选嵌套类:使用
GetNestedTypes方法直接获取Permissions类下的公共静态嵌套类,避免遍历无关成员 - 绑定标志匹配:获取字段时指定
BindingFlags.Public | BindingFlags.Static,确保只拿到目标公共静态常量字段 - 常量取值:const类型的静态字段调用
GetValue(null)即可获取值,无需实例化对象
输出结果
执行后会输出你期望的内容:
Permissions.Aircraft.View Permissions.Aircraft.Create Permissions.Aircraft.Edit Permissions.Aircraft.Delete Permissions.TripRecord.View Permissions.TripRecord.Create Permissions.TripRecord.Edit Permissions.TripRecord.Delete
内容的提问来源于stack exchange,提问作者Reafidy
相关产品推荐
相关产品推荐

