C # hacer un Diccionario de Lambdas

c# expression-trees lambda

Pregunta

Estoy teniendo problemas para definir un diccionario para acceder rápidamente a Lambda Expressions.

Supongamos que tenemos una clase conocida como esta:

class Example
{
    public string Thing1;
    public DateTime Thing2;
    public int Thing3;
}

Lo que quiero hacer es algo como esto:

var getters = new Dictionary<string, IDontKnowWhatGoesHere>();
getters.Add("Thing1", x => x.Thing1);
getters.Add("Thing3", x => x.Thing3);

es posible?

Editar:

Este es mi caso de uso para este objeto:

List<Example> array = new List<Example>();

// We actually get this variable set by the user
string sortField = "Thing2";

array.Sort(getters[sortField]);

Muchas gracias por su ayuda.

Respuesta aceptada

Tienes un par de opciones. Si, como en su ejemplo, las cosas que desea obtener son todas del mismo tipo (es decir, String ), puede hacerlo

var getters = new Dictionary<string, Func<Example, String>>();

Sin embargo, si son tipos diferentes, deberá usar la subclase común más baja, que en la mayoría de los casos será Object :

var getters = new Dictionary<string, Func<Example, object>>();

Tenga en cuenta que luego deberá convertir el valor de retorno en el tipo esperado.


Respuesta popular

var getters = new Dictionary<string, Expression<Func<Example, object>>>();

Sin embargo, la string Thing1 debe ser pública.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow