передача свойства для получения его значения (как выражение?)

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

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

С уважением,
Беррил

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 = ???;
    }

}

person Berryl    schedule 25.02.2011    source источник


Ответы (3)


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

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

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

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

person marcind    schedule 25.02.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);
}
person Reed Copsey    schedule 25.02.2011

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

person Robert Levy    schedule 25.02.2011
comment
Марсинд прав - я ответил на вопрос, который вы на самом деле задали, но он отвечает на то, что вам действительно нужно :) - person Robert Levy; 25.02.2011