如何通过名称获取实体的实体属性
本文关键字:实体 属性 获取 何通过 | 更新日期: 2023-09-27 17:59:40
在类Person中,i与类Position有关系,类Position与类PositionTitle有关系,PositionTitle具有名为Title 的属性
public class Person
{
public position Position{get;set;}
public string Name{get;set;}
public DateTime BirthDate{get;set;}
public bool IsAdmin{get;set;}
public int Age{get;set;}
}
public class position
{
public positionTitle PositionTitle{get;set;}
public bool IsSystem{get;set;}
}
public class PositionTitle
{
public string Title{get;set;}
}
我有一个字符串"Person.Position.PositionTitle.Title",如何用这个字符串获取Person的这个属性??
编辑:
我应该添加一些东西,我会得到人的所有属性,直到得到系统类型,我的意思是,我想把这些属性作为字符串{Name,Age,IsAdmin,BirthDate,IsSystem,Title}
我怎么能?
EDiT2:还有一个问题,Position本身可以与Person有关系,如果我获得Person的属性,并递归地获得Person与之有关系的类的属性,就会有一个不停的循环,因为Person有Position,Position有Person
基本上,您可以通过'.'来分割字符串,然后循环遍历每个子字符串,使用反射来获取当前实例的属性。然后将实例设置为您刚刚获得的属性。
你最终会得到你想要的房产。
/// <summary>
/// Gets an object property's value, recursively traversing it's properties if needed.
/// </summary>
/// <param name="FrameObject">The object.</param>
/// <param name="PropertyString">The object property string.
/// Can be the property of a property. e.g. Position.X</param>
/// <returns>The value of this object's property.</returns>
private object GetObjectPropertyValue(Object FrameObject, string PropertyString)
{
object Result = FrameObject;
string[] Properties = PropertyString.Split('.');
foreach (var Property in Properties)
{
Result = Result.GetType().GetProperty(Property).GetValue(Result, null);
}
return Result;
}
免责声明:这适用于我,注意空引用等!