如何筛选类属性集合

本文关键字:属性 集合 筛选 何筛选 | 更新日期: 2023-09-27 18:04:18

示例:我有一个类

public class MyClass
{
    private string propHead;
    private string PropHead { get; set; }
    private int prop01;
    private int Prop01 { get; set; }
    private string prop02;
    private string Prop02 { get; set; }
    // ... some more properties here
    private string propControl;
    private string PropControl { get; }  // always readonly
}

我需要排除propHead和propControl。排除propControl:

MyClass mc = new MyClass();
PropertyInfo[] allProps = mc.GetType().GetProperties().Where(x => x.CanWrite).ToArray();

现在,我如何排除prohead ?,当所有共享相同级别的可访问性时。是否有任何方法可以向propHead添加一个特殊的属性,让我将其从其他属性中排除。属性名在每个类中总是不同的。

如何筛选类属性集合

这是最简单的方法:

MyClass mc = new MyClass();
PropertyInfo[] allProps = mc.GetType()
    .GetProperties()
    .Where(x => x.Name != "propHead" && x.Name != "propControl")
    .ToArray();

但是如果你正在寻找一个更通用的解决方案,你可以试试这个

public class CustomAttribute : Attribute
{
    ...
}
MyClass mc = new MyClass();
PropertyInfo[] allProps = mc.GetType()
    .GetProperties()
    .Where(x => x.GetCustomAttributes(typeof(CustomAttribute)).Length > 0)
    .ToArray();