我正在尝试使用反射来遍历List中的DetailClass
对象,就像字符串字段一样,但我无法弄清楚如何。
class DetailClass
{
public string FieldDetail1 { get; set; }
public string FieldDetail2 { get; set; }
public string FieldDetail3 { get; set; }
}
class SomeClass
{
public string Field1 { get; set; }
public string Field2 { get; set; }
public string Field3 { get; set; }
public List<DetailClass> Artikli { get; set; }
}
private static PropertyInfo[] GetProperties(object obj)
{
return obj.GetType().GetProperties();
}
var myData = new SomeClass();
var prop = GetProperties(myData);
foreach (var item in prop)
{
if (item.PropertyType == typeof(string))
{
var name = item.Name,
var value = item.GetValue(myData).ToString()));
}
//how to get name and value for data inside List<DetailClass>?
}
答案 0 :(得分:0)
item.PropertyType.GetInterfaces().Contains(typeof(IEnumerable))
如果为true,则转换(IEnumerable)item.GetValue(myData)
并迭代结果
递归。答案 1 :(得分:0)
就像TheDude回答的那样,你可以使用像这样的递归方法;
private void Recursion(object obj)
{
var props = GetProperties(obj);
foreach (var item in props)
{
if (item.PropertyType == typeof(string))
{
var name = item.Name;
var value = item.GetValue(obj)?.ToString();
}
else if (item.PropertyType == typeof(List<DetailClass>))
{
var test = (List<DetailClass>) item.GetValue(obj);
foreach (var t in test)
{
Recursion(t);
}
}
}
}
使用列表中的名称和值做任何你想做的事。
答案 2 :(得分:0)
GetValue
需要对您正在处理的班级的引用<强>代码强>
var myData = new SomeClass();
myData.Artikli = new List<DetailClass>() { new DetailClass() { FieldDetail1 = "asd", FieldDetail2 = "sdfd", FieldDetail3 = "sdfsg" } };
foreach (var obj in myData.Artikli)
{
foreach (var item in obj.GetType().GetProperties())
{
if (item.PropertyType == typeof(string))
{
var name = item.Name;
var val = item.GetValue(obj);
Console.WriteLine(name + ", " + val);
}
}
}
其他资源
PropertyInfo.GetValue Method (Object)
返回指定对象的属性值。
<强>参数强>
- OBJ
- 类型:System.Object
- 将返回其属性值的对象。