我的列表为ProductSpec {id, Name}
,另一个列表为Product {productspec, id, Name}
。
当我尝试访问Product的属性
IList<PropertyInfo> properties = typeof(Product).GetProperties().ToList();
我正在修改我的身份和姓名作为财产,这很好,但当我试图重申productpec为
foreach(var property in properties)
{
IList<PropertyInfo> properties = property.propertytype.getproperties();
// I am not getting the productspec columns
//instead I am getting (capacity,count ) as my properties..
}
那么如何重复列表中的列表以获取列表属性
答案 0 :(得分:3)
您需要为属性类型使用相同的代码:
var innerProperties = property.PropertyType.GetProperties().ToList();
同样重命名结果 - 它与foreach
循环中的变量冲突。
答案 1 :(得分:3)
类型ProductSpec
或Product
类型的ProductSpec
类中List<ProductSpec>
的类型是什么?如果是列表,您可以执行以下操作:
var properties = new List<PropertyInfo>();
foreach (var property in properties)
{
if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
&& property.PropertyType.IsGenericType
&& property.PropertyType.GetGenericArguments().Length == 1)
{
IList<PropertyInfo> innerProperties = property.PropertyType.GetGenericArguments()[0].GetProperties();
//should contain properties of elements in lists
}
else
{
IList<PropertyInfo> innerProperties = property.PropertyType.GetProperties();
//should contain properties of elements not in a list
}
}
答案 2 :(得分:0)
试试这个:
PropertyInfo[] propertyInfos = typeof(Product).GetProperties();
foreach (var propertyInfo in propertyInfos)
{
var inner = propertyInfo.PropertyType.GetProperties().ToList();
}
public class Product
{
public ProductSpec Spec { get; set; }
public string Id { get; set; }
public string Name { get; set; }
}
public class ProductSpec
{
public string Id { get; set; }
public string Name { get; set; }
}