我有基类Entity和enheritance类说Home,
public class Home : Entity
{
public int CityId{get;set;}
}
public class Town : Entity
{
public int CityId {get;set}
public Home CityHall {get;set;}
public List<Home > Homes{get;set;}
}
我想为Town及其孩子设置CityId 所以第一次尝试我做了以下
public class DataAccessBase<T> where T : Entity
{
public int Add(T entity)
{
Type t = typeof(T);
PropertyInfo prop = t.GetProperty("CityId");
if (prop != null)
{
prop.SetValue(entity, 2);
}
}
}
这项工作只针对父母如何访问孩子,我想简单地说,因为我有一个数据插入数据库,因为我有一个数据插入数据库
答案 0 :(得分:2)
看起来有两个无关的问题
如果属性存在,如何在不知情的情况下设置对象的属性:反射就像你解决它一样。请注意,这不是C#方式 - 您使用某些接口并将泛型限制为该接口,以允许对属性进行强类型访问。
如何在不知道类型的情况下枚举“子”对象:传统的解决方案是为“GetChildren”功能添加接口。或者,您可以使用反射并查找“子”类型的所有属性,并与类型为IEnumerable<"child type">
的所有属性组合。
如果你可以使用某些约定dynamic
可以更容易替代反射(即每种类型都公开Children
属性来枚举它们:
dynamic town = GetTown();
foreach(dynamic child in town.Children) {...}
答案 1 :(得分:1)
您可以直接设置属性,无需反射。
entity.CityId = 1;
if(entity is Town) {
var town = entity as Town;
if(town.Homes!=null) {
town.Homes.ForEach(t=> t.CityId = entity.CityId);
}
}