передавая свойство, чтобы получить его значение (как выражение?) - PullRequest
0 голосов
/ 25 февраля 2011

Я думаю, что смогу использовать какое-то выражение в качестве аргумента для заключительного метода ниже, но я не смог разобраться.

Как я могу это сделать?

Приветствия
Berryl

class Detail{
    string DisplayName{get;set;}
    string SpanishName{get;set;}
    string FrenchName{get;set;}
}

class Master{
    IEnumerable<Detail> AllDetail{get;set;}
    bool DoSpanish(get;set;)
    bool DoFrench(get;set;)

    _flipDisplayName(){
        DoSpanish 
            ? _flipDisplayName(x=>x.SpanishName) 
            : _flipDisplayName(x=>x.FrenchName);
    }

    // *****************************************************
    _flipDisplayName(????){ <==== Expression??
            foreach(Detail detail in AllDetail) detail.DisplayName = ???;
    }

}

Ответы [ 3 ]

4 голосов
/ 25 февраля 2011

Попробуйте что-то вроде

_flipDisplayName(Func<Detail, string> name){ 
     foreach(Detail detail in AllDetail)
         detail.DisplayName = name(detail); 
}

Поскольку вам не нужно анализировать переданное выражение, достаточно Func<,>.

Вы также можете использовать Expression<Func<,>>, что позволитпроанализировать предоставленное выражение, чтобы выяснить, относится ли оно к английскому или испанскому свойству, но в этом случае это не обязательно.

1 голос
/ 25 февраля 2011

Если я правильно понимаю ваши цели, вы можете сделать:

private void _flipDisplayName(Func<Detail, string> displayFunc)
{
        foreach(Detail detail in AllDetail) 
            detail.displayFunc(detail);
}

Тогда может быть другая перегрузка:

private void _flipDisplayName()
{
    this.DoSpanish ? _flipDisplayName(x => x.SpanishName) 
                   : _flipDisplayName(x => x.FrenchName);
}
0 голосов
/ 25 февраля 2011

Извлечь Получить значение из лямбда-выражения ASP.NET MVC . Это в контексте MVC, но ответ применим везде.

...