如何通过c#中的反射获取仅类型的受保护和公共属性

Anw*_*una 1 .net c#

我试图只获取一个类型的受保护和公共属性.这就是我目前正在做的事情

var type = typeof(AClass);
var propertyInfo = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
Run Code Online (Sandbox Code Playgroud)

但我想从私有和内部属性中过滤出公共和受保护的属性.

关于如何做到这一点的任何建议?

Evk*_*Evk 8

请注意,属性包含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)