C # faire un dictionnaire de Lambdas

c# expression-trees lambda

Question

Je ne parviens pas à définir un dictionnaire pour accéder rapidement aux expressions lambda.

Supposons que nous ayons une classe bien connue comme celle-ci:

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

Quel envie de faire est quelque chose comme ça:

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

Est-ce possible?

Modifier:

Voici mon cas d'utilisation pour cet objet:

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

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

array.Sort(getters[sortField]);

Merci beaucoup pour votre aide.

Réponse acceptée

Vous avez plusieurs options. Si, comme dans votre exemple, les éléments que vous souhaitez obtenir sont tous du même type (c.-à-d. String ), vous pouvez le faire.

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

Cependant, s'ils sont de types différents, vous devrez utiliser la sous-classe commune la plus basse, qui dans la plupart des cas sera Object :

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

Notez que vous devrez ensuite convertir la valeur de retour dans le type attendu.


Réponse populaire

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

Cependant, la string Thing1 devrait être publique.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow