Pasando el nombre de la propiedad fuertemente escrito como argumento

Tengo una coleccion deIEnumerable<School> que se pasa a un método de extensión que llena unaDropDownList. También me gustaría pasar elDataValueField yDataTextField como un argumento pero quería que fueran fuertemente tipados.

Básicamente, no quiero pasar unstring Para elDataValueField yDataTextField Argumentos, es propenso a errores.

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();
}

Llamado así ...

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

Mi pregunta es, ¿cómo puedo pasar elDataValueField yDataTextField fuertemente tipado como un argumento para populateDropDownList?

Respuestas a la pregunta(3)

Su respuesta a la pregunta