首先,我知道流行的建议是你应该避免返回空列表。但截至目前,由于种种原因,我别无选择,只能这样做。
我要问的是,我如何遍历对象的属性(可能通过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
}
}
}
这应该对您有用,只需使用GetValue
方法并将值转换为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);
}
}
}
}