gpt4 book ai didi

c# - 如何忽略使用反射继承的类的所有隐藏属性?

转载 作者:行者123 更新时间:2023-12-04 02:49:54 26 4
gpt4 key购买 nike

我有一个问题,我需要从一个对象中获取所有属性,然后对属性进行排序并将某些属性的值发送到另一个服务。以下是代码示例:

public class Class1
{
public string A { get; set; }
public bool B { get; set; }
}

public class Class2 : Class1
{
public new bool? B { get; set; }
public bool C { get; set; }
}

我需要获取 Class2 的所有属性,但是当使用 Class2.GetType().GetProperties() 时,结果包含 Class2 AND Class1 中的 B。这导致了我的问题,因为在循环每个属性时我发送 B 两次,一次具有默认值 false 因为它从未设置,然后另一个具有由我的服务设置的正确值。我需要结果包含 Class2 中的 B、Class1 中的 A 和 Class2 中的 C,但忽略 Class1 中的 B,因为它已被 new 关键字隐藏。

我试过查看我可以使用的绑定(bind)标志,但没有帮助。我能找到的最接近的标志是 BindingFlags.DeclaredOnly 标志,但它不包括 Class1 中的 A,所以它对我不起作用。

如果原始属性已被隐藏,我将如何忽略它?

最佳答案

您可以使用 LINQ 查询来过滤掉隐藏的属性。

var allProps = typeof(Class2).GetProperties(
BindingFlags.Instance | BindingFlags.Public
);

var thePropsYouWant =
from p in allProps
group p by p.Name into g
select g.OrderByDescending(t => t.DeclaringType == typeof(Class2)).First();

在这里运行: https://dotnetfiddle.net/V5sGIs

关于c# - 如何忽略使用反射继承的类的所有隐藏属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55541027/

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