【发布时间】:2019-08-13 02:35:07
【问题描述】:
我一直在拼命想弄清楚如何动态遍历对象层次结构以查找父类下的所有字符串属性并对这些字符串进行替换。
假设我有一个包含一些属性的父“包装器”类。像这样
public class ParentWrapper
{
public Person Mom { get; set; }
public Person Dad { get; set; }
public IEnumerable<Person> Children { get; set; }
public Person FavoritePerson { get; set; }
public string FamilyName { get; set; }
}
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我希望能够动态地使用反射来查找 ParentWrapper 或任何其他对象中的所有字符串属性。我想找到父类中的字符串属性“FamilyName”,但我也想找到嵌套类中的所有字符串值。我想找到每个人的 FirstName 和 LastName 的所有字符串以及嵌套在子类中的对象内的任何字符串。
.GetType().GetProperties().Where(prop => prop.PropertyType == typeof(string))
这将使我获得 ParentWrapper 类中的所有字符串属性,但我希望能够动态地深入到所有不同的级别。
希望我的请求是有道理的。
【问题讨论】:
-
你知道如何用 C# 编写递归方法吗?
-
是的,@DavidBrowne-Microsoft
-
然后编写一个递归方法来枚举对象的属性,并且对于每个属性,1) 将其添加到字符串属性列表中 2) 忽略它或 3) 使用属性的值递归调用自身.
-
你想对
string[](字符串数组)成员做什么? -
您要查找属性的值,还是要查找字段或属性的
MemberInfo?你想如何区分例如FirstName为Dad来自FirstName为Mom?
标签: c# linq system.reflection