Reflection (?) - Проверить значение null или пустое для каждого свойства/поля в классе?
У меня есть простой класс:
public class FilterParams
{
public string MeetingId { get; set; }
public int? ClientId { get; set; }
public string CustNum { get; set; }
public int AttendedAsFavor { get; set; }
public int Rating { get; set; }
public string Comments { get; set; }
public int Delete { get; set; }
}
Как проверить каждое свойство в классе, если они не являются нулями (int) или empty/null (для строки), тогда я преобразую и добавлю это значение свойства в List<string>
?
Спасибо.
Ответы
Ответ 1
Вы можете использовать LINQ для этого:
List<string> values
= typeof(FilterParams).GetProperties()
.Select(prop => prop.GetValue(yourObject, null))
.Where(val => val != null)
.Select(val => val.ToString())
.Where(str => str.Length > 0)
.ToList();
Ответ 2
Не самый лучший подход, но грубо:
Предполагая, что obj
является экземпляром вашего класса:
Type type = typeof(FilterParams);
foreach(PropertyInfo pi in type.GetProperties())
{
object value = pi.GetValue(obj, null);
if(value != null || !string.IsNullOrEmpty(value.ToString()))
// do something
}
Ответ 3
Если у вас не так много таких классов и не слишком много свойств, самым простым решением является, возможно, написать блок iterator, который проверяет и преобразует каждое свойство:
public class FilterParams
{
// ...
public IEnumerable<string> GetValues()
{
if (MeetingId != null) yield return MeetingId;
if (ClientId.HasValue) yield return ClientId.Value.ToString();
// ...
if (Rating != 0) yield return Rating.ToString();
// ...
}
}
Использование:
FilterParams filterParams = ...
List<string> values = filterParams.GetValues().ToList();
Ответ 4
PropertyInfo[] properties = typeof(FilterParams).GetProperties();
foreach(PropertyInfo property in properties)
{
object value = property.GetValue(SomeFilterParamsInstance, null);
// preform checks on value and etc. here..
}
Ответ 5
Вот пример:
foreach (PropertyInfo item in typeof(FilterParams).GetProperties()) {
if (item != null && !String.IsNullOrEmpty(item.ToString()) {
//add to list, etc
}
}
Ответ 6
Вам действительно нужно отражение? Внедрение такого свойства, как
bool IsNull - дело для вас? Вы можете инкапсулировать его в интерфейсе, таком как INullableEntity, и реализовать в каждом классе, который нуждается в такой функции, очевидно, если есть много классов, возможно, вам придется придерживаться рефлексии.