C# 如何通过名称获取实体的实体属性

C# 如何通过名称获取实体的实体属性,c#,reflection,C#,Reflection,在类人中,我与类位置相关,类位置与类位置Title相关,而位置Title有一个名为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 cla

在类人中,我与类位置相关,类位置与类位置Title相关,而位置Title有一个名为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;
    }
//
///获取对象属性的值,如果需要,递归遍历其属性。
/// 
///物体。
///对象属性字符串。
///可以是属性的属性。e、 g.位置X
///此对象属性的值。
私有对象GetObjectPropertyValue(对象FrameObject、字符串PropertyString)
{
对象结果=帧对象;
string[]Properties=PropertyString.Split('.');
foreach(属性中的var属性)
{
Result=Result.GetType().GetProperty(Property).GetValue(Result,null);
}
返回结果;
}

Disclamer:这适合我使用,注意空引用等

PositionTitle
这是什么,问题是什么?您的示例中有两个Person类……这段代码看起来有点混乱。您似乎已经声明了PersonClass两次,并且每个人在其中都有一个位置。你有没有可能弄清楚,你到底在问什么?因为我不完全确定我是否明白你的意思。正如其他人所说,你已经详细说明了你的问题,非常不清楚。虽然从你的问题来看,你很可能在寻找
String.Split()
这是什么应该添加一些东西,我将获得person的所有属性,直到获得系统类型?如果没有任何双向关系,它可能会工作,person有一个位置,Position有一个person,然后,它可以不停地运行loop@Adrakadabra,试试看。它仍然可以工作,因为您给它的字符串不是无限的,即它只有
Person.Position.Person.Position….
多次。