首先,我知道您应该avoid returning empty lists的流行建议。但是到目前为止,由于种种原因,我只能这样做。
我要问的是如何通过对象的属性(可能通过Reflection
来迭代),获取可能发现的所有列表,并检查其是否为空。如果是这样,则将其变成null
,否则将其保留。
我坚持下面的代码,其中包括对Reflection
的尝试:
private static void IfEmptyListThenNull<T>(T myObject)
{
foreach (PropertyInfo propertyInfo in myObject.GetType().GetProperties())
{
if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{
//How to know if the list i'm checking is empty, and set its value to null
}
}
}
答案 0 :(得分:3)
这应该为您工作,只需使用IList
方法并将值强制转换为SetValue
,然后检查是否为空并通过null
将值设置为private static void IfEmptyListThenNull<T>(T myObject)
{
foreach (PropertyInfo propertyInfo in myObject.GetType().GetProperties())
{
if (propertyInfo.PropertyType.IsGenericType && propertyInfo.PropertyType.GetGenericTypeDefinition() == typeof(List<>))
{
if (((IList)propertyInfo.GetValue(myObject, null)).Count == 0)
{
propertyInfo.SetValue(myObject, null);
}
}
}
}
。
Array