C # crea un dizionario di Lambda

c# expression-trees lambda

Domanda

Ho difficoltà a definire un dizionario per l'accesso rapido a Lambda Expressions.

Supponiamo di avere una classe ben nota come questa:

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

Che cosa voglio fare è qualcosa del genere:

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

È possibile?

Modificare:

Questo è il mio caso d'uso per questo oggetto:

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

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

array.Sort(getters[sortField]);

Molte grazie per il vostro aiuto.

Risposta accettata

Hai un paio di opzioni. Se, come nel tuo esempio, le cose che vuoi ottenere sono tutte dello stesso tipo (cioè String ), puoi farlo

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

Tuttavia, se sono di tipo diverso, dovrai utilizzare la sottoclasse comune più bassa, che nella maggior parte dei casi sarà Object :

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

Tieni presente che dovrai quindi trasmettere il valore restituito nel tipo previsto.


Risposta popolare

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

Tuttavia, string Thing1 dovrebbe essere pubblica.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché