gpt4 book ai didi

c# - 如何通过 C# 中的反射获取类型的 protected 和公共(public)属性

转载 作者:太空宇宙 更新时间:2023-11-03 18:24:42 24 4
gpt4 key购买 nike

我试图只获取一个类型的 protected 和公共(public)属性。这就是我目前正在做的事情

var type = typeof(AClass);
var propertyInfo = type.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)

但我只想从私有(private)和内部属性中过滤掉公共(public)和 protected 属性。

关于如何进行此操作有什么建议吗?

最佳答案

请注意,属性包含 get 和 set 方法,它们可以具有不同的可访问性(即一个可以是公共(public)的,另一个可以是 protected 等)。此外,可以缺少 getter 或 setter(仅获取或仅设置属性)。要获取 get 或 set 方法 protected 属性,您可以这样做:

 typeof(AClass).GetProperties(BindingFlags.Instance | BindingFlags.NonPublic)
.Where(c => c.GetMethod != null && c.GetMethod.IsFamily || c.SetMethod != null && c.SetMethod.IsFamily).ToArray();

我还删除了 BindingFlags.Public,但这不是必需的 - 也可以正常工作。

如果你想获得 protected 和公共(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();

关于c# - 如何通过 C# 中的反射获取类型的 protected 和公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726430/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com