как получить свойство объекта по имени - PullRequest
2 голосов
/ 21 июня 2011

в классе Person я имею отношение к классу 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", как я могу получить это свойство человека с этой строкой ??

EDIT:

я должен добавить что-то, я собираюсь получить все свойства человека, пока не доберусь до системных типов, я имею в виду, что хочу иметь эти свойства в виде строки {Имя, Возраст, IsAdmin, Дата рождения, IsSystem, Название}

как я мог?

EDiT2: еще одна проблема ,, само положение может иметь отношение к Person, и если я получу свойства person и рекурсивно получу свойства тех классов, к которым отношение person имеет ,, был бы цикл без остановки, потому что Лицо имеет должность, а должность имеет лицо

1 Ответ

3 голосов
/ 21 июня 2011

По сути, вы разделяете строку на «.», Затем перебираете каждую подстроку, используя отражение, чтобы получить свойство текущего экземпляра.Затем установите экземпляр для свойства, которое вы только что получили.

В итоге вы получите свойство, которое вам нужно.

    /// <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;
    }

Отказ от ответственности: Этоработает для моего использования, следите за нулевыми ссылками и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...