我试图只获取一个类型的受保护和公共属性.这就是我目前正在做的事情
var type = typeof(AClass);
var propertyInfo = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
Run Code Online (Sandbox Code Playgroud)
但我想从私有和内部属性中过滤出公共和受保护的属性.
关于如何做到这一点的任何建议?
请注意,属性包含get和set方法,并且它们可以具有不同的可访问性(即一个可以是公共的,另一个可以受到保护等).此外,可能缺少getter或setter(仅限get或only-only属性).要获取get或set方法受保护的属性,可以执行以下操作:
typeof(AClass).GetProperties(BindingFlags.Instance | BindingFlags.NonPublic)
.Where(c => c.GetMethod != null && c.GetMethod.IsFamily || c.SetMethod != null && c.SetMethod.IsFamily).ToArray();
Run Code Online (Sandbox Code Playgroud)
我也删除了BindingFlags.Public,但这不是必需的 - 也可以正常使用它.
如果你想获得受保护的公共属性,只需修改一下:
typeof(AClass).GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
.Where(c => (c.GetMethod != null && (c.GetMethod.IsPublic || c.GetMethod.IsFamily)) || (c.SetMethod != null && (c.SetMethod.IsPublic || c.SetMethod.IsFamily))).ToArray();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |