У меня есть класс, который имеет много свойств 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));
}
}
}
7
ChrisCa
24 Апр 2017 в 16:00
2 ответа
Лучший ответ
Вы можете сделать это следующим образом - все те свойства, которые имеют тип 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);
}
}
16
AlexB
19 Сен 2019 в 14:55
Без 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
}
}
}
3
Adam Jachocki
24 Апр 2017 в 13:31
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.