有一个复杂的反射问题。给定下面的代码,如何实现伪代码,以便给定Parent的实例,它将枚举类型属性,找到具有与Parent相同类型的属性的子对象,并将引用设置为提供的p。希望这是有意义的。我还需要这个能够与通用列表一起使用。请参见下面的示例对象图。运行后,每个Pet实例中的Person都将是Parent实例。
public class ChildSetter<Parent>
{
public void Set(Parent p)
{
//pseudo
//var parentName = p.GetType().Name;
//foreach (var property in p.Properties)
//{
// if (!property.IsList)
// {
// if (property.ContainsProperty(parentName))
// property.Properties[parentName] = p;
// }
// else
// {
// if (property.ListType.ContainsProperty(parentName))
// {
// foreach (var item in property)
// {
// item.Properties[parentName] = p;
// }
// }
// }
//}
}
}
public class Person
{
public Pet Pet { get; set; }
public IList<Pet> Pets { get; set; }
}
public class Pet
{
public Person Person { get; set; }
}
这段代码的非泛化示例如下:
public void Set(Person p)
{
p.Pet.Person = p;
foreach (var pet in p.Pets)
{
pet.Person = p;
}
}