确定匿名类型的属性是否为泛型集合
本文关键字:是否 泛型 集合 属性 类型 | 更新日期: 2023-09-27 18:06:26
我需要一个方法来循环遍历每个对象的属性并记录属性名称和值。然而,有时我碰到一个列表对象属性,整个程序就崩溃了。我从各种SO帖子中收集了下面的条件,但每次都返回false。想知道如何测试方法属性是否是泛型集合类型?
类定义public class DtccProducer
{
public string ProducerDateOfBirth { get; set; }
public string ProducerGender { get; set; }
public string TransactionType { get; set; }
public List<BigAddress> Addresses { get; set; }
public List<BigCommunicationItem> Communications { get; set; }
}
private static void ParseProducer(object obj)
{
StringBuilder s = new StringBuilder();
Type objType = obj.GetType();
foreach (PropertyInfo info in objType.GetProperties())
{
string key = info.Name;
Type propType = info.PropertyType;
if (propType.IsGenericType && typeof(ICollection<>).IsAssignableFrom(propType.GetGenericTypeDefinition()))
{
// This condition never passes - always evaluates to false
}
else
{
string value = (string) info.GetValue(obj, null);
_sb.AppendLine(key + ": " + value);
}
}
}
这是我用来在日志中识别列表的代码:
if (!propType.IsPrimitive && !propType.IsEnum && propType != typeof(string) && propType.GetInterfaces().Any(x => x.IsGenericType
&& x.GetGenericTypeDefinition() == typeof(IEnumerable<>)))
编辑:我已经添加了一些额外的检查来过滤掉基本类型(int, bool等),enum和字符串。