我遇到一个问题,我需要从一个对象获取所有属性,然后对这些属性进行排序,然后将某些属性的值发送到另一个服务。这是代码示例:
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关键字隐藏。
我尝试浏览可以使用的绑定标志,但没有帮助。我可以找到的最接近的标志是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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句