Passando o nome da propriedade fortemente tipado como argumento

Eu tenho uma coleção deIEnumerable<School> que está sendo passado para um método de extensão que preenche umDropDownList. Eu também gostaria de passar oDataValueField eDataTextField como um argumento, mas eu queria que eles fossem fortemente tipados.

Basicamente, eu não quero passar umstring para oDataValueField eDataTextField argumentos, é propenso a erros.

public static void populateDropDownList<T>(this DropDownList source,
        IEnumerable<T> dataSource,
        Func<T, string> dataValueField,
        Func<T, string> dataTextField) {
    source.DataValueField = dataValueField; //<-- this is wrong
    source.DataTextField = dataTextField; //<-- this is wrong
    source.DataSource = dataSource;
    source.DataBind();
}

Chamado assim ...

myDropDownList.populateDropDownList(states,
        school => school.stateCode,
        school => school.stateName);

Minha pergunta é: como posso passar oDataValueField eDataTextField fortemente tipado como um argumento para populateDropDownList?

questionAnswers(3)

yourAnswerToTheQuestion