检索类的所有布尔属性的名称,这些属性为true

时间:2017-04-24 13:00:07

标签: c# reflection

我有一个有很多bool属性的类。如何创建另一个属性,该属性是包含值为true的属性名称的字符串列表?

请参阅下面的初步尝试 - 无法弄清楚如何过滤真实的

public class UserSettings
{
    public int ContactId { get; set; }
    public bool ShowNewLayout { get; set; }
    public bool HomeEnabled { get; set; }
    public bool AccountEnabled { get; set; }

    // lots more bool properties here

    public IEnumerable<string> Settings
    {
        get
        {
            return GetType()
                .GetProperties()
                .Where(o => (bool)o.GetValue(this, null) == true) //this line is obviously wrong
                .Select(o => nameof(o));
        }
    }
}

2 个答案:

答案 0 :(得分:12)

你可以这样做 - 所有类型为bool并且true的所有属性......

public IEnumerable<string> Settings
{
    get
    {
        return GetType()
            .GetProperties().Where(p => p.PropertyType == typeof(bool) 
                                         && (bool)p.GetValue(this, null));
            .Select(p => p.Name);
    }
}

答案 1 :(得分:3)

没有LINQ:

foreach (PropertyInfo propertyInfo in data.GetType().GetProperties())
{
    if (propertyInfo.PropertyType == typeof(bool))
    {
        bool value = (bool)propertyInfo.GetValue(data, null);

        if(value)
        {
           //add propertyInfo to some result
        }
    }
}