лямбда-выражение как свойство

У меня есть рабочая установка, которая не является строго типизированной и полагается на отражение.

У меня есть класс, например

class Person{

    public string FirstName {get ; set;}
    public string LastName {get; set;}
    public int Age {get; set;}
    ...  
    // some more public properties
}

и

class CellInfo {
     public string Title {get; set;}
     public string FormatString {get; set;}
}

, и такой словарь

Dictionary<string, CellInfo> fields = new Dictionary<string, CellInfo>();
fields.Add("FirstName", new CellInfo {Title = "First Name", FormatString = "Foo"});
fields.Add("LastName", new CellInfo {Title = "Last Name", FormatString = "Bar"});

Это простой словарь с именами свойств и некоторой информацией о них. Я передаю словарь другому модуль, который обрабатывает экземпляры Person, и я это делаю

Dictionary<string, CellInfo> fields = SomeMethodToGetDictionary();
foreach(Person p in someCollection)
{
    foreach(var field in fields)
    { 
       object cellValue = type(Person).GetProperty(field.Key).GetValue(p, null);
       // use cellValue and info on field from field.Value somewhere.
       ...
    }
 }

Этот метод передачи строки для имени поля и использования отражения работает, но мне было интересно, есть ли для этого строго типизированный метод.

Я имел в виду свойство, в котором хранится выражение linq, что-то вроде этого

fields.Add("FirstName", new CellInfo 
                   {
                      Title = "First Name", 
                      FormatString = "Foo",
                      EvalExpression = p => p.FirstName
                   });

, и во время использования каким-то образом использовать EvalExpression для объекта человека и получать значение свойства. Я понятия не имею, с чего начать и каков будет синтаксис, чтобы иметь такое свойство, которое можно было бы оценить. Я новичок в функциях-делегатах и ​​деревьях выражений, по которым я даже не знаю подходящих ключевых слов для поиска. Надеюсь, мое описание ясно; Если нет, дайте мне знать, и я при необходимости подробно расскажу. Любая помощь будет очень признательна.

9
задан Professor Chaos 23 September 2011 в 10:21
поделиться