我有一个有很多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));
}
}
}
答案 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
}
}
}