gpt4 book ai didi

c# - 在 type.GetProperties() 时过滤掉 protected setter

转载 作者:太空狗 更新时间:2023-10-29 23:17:47 25 4
gpt4 key购买 nike

我正在尝试反射(reflect)一个类型,并仅获取具有公共(public) setter 的属性。这似乎对我不起作用。在下面的示例 LinqPad 脚本中,“Id”和“InternalId”与“Hello”一起返回。我可以做些什么来过滤掉它们?

void Main()
{
typeof(X).GetProperties(BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance)
.Select (x => x.Name).Dump();
}

public class X
{
public virtual int Id { get; protected set;}
public virtual int InternalId { get; protected internal set;}
public virtual string Hello { get; set;}
}

最佳答案

您可以使用 GetSetMethod()以确定 setter 是否公开。

例如:

typeof(X).GetProperties(BindingFlags.SetProperty |
BindingFlags.Public |
BindingFlags.Instance)
.Where(prop => prop.GetSetMethod() != null)
.Select (x => x.Name).Dump();

GetSetMethod() 返回方法的公共(public) setter,如果没有则返回 null

由于属性可能具有与 setter 不同的可见性,因此需要通过 setter 方法可见性进行过滤。

关于c# - 在 type.GetProperties() 时过滤掉 protected setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558750/

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