Funzionerebbe per utilizzare Expression<Func<T>>
o Func<T>
come chiavi in un dizionario? Ad esempio per memorizzare nella cache il risultato di calcoli pesanti.C#: è possibile utilizzare espressioni o funzioni come chiavi in un dizionario?
Ad esempio, modificare la cache molto di base da un different question mio un po ':
public static class Cache<T>
{
// Alternatively using Expression<Func<T>> instead
private static Dictionary<Func<T>, T> cache;
static Cache()
{
cache = new Dictionary<Func<T>, T>();
}
public static T GetResult(Func<T> f)
{
if (cache.ContainsKey(f))
return cache[f];
return cache[f] = f();
}
}
Sarebbe questo anche il lavoro?
Modifica: Dopo un test rapido, sembra che funzioni effettivamente. Ma ho scoperto che potrebbe probabilmente essere più generico, in quanto ora sarebbe una cache per tipo di ritorno ... non so come cambiare in modo che non sarebbe successo se ... hmm
Edit 2 : No, aspetta ... in realtà no. Bene, per i metodi regolari lo fa. Ma non per Lambda. Ottengono vari nomi di metodi casuali anche se sembrano uguali. Vabbè c",)
Perché lo stai facendo? –
Non lo sono. Ero inciampato nel pensiero mentre immaginavo la cache nella mia altra domanda e mi sono incuriosito :) – Svish
Punti bonus per curiosità investigativa, ma non riesco davvero a vedere alcuna applicazione reale per la tecnica. D'altra parte, l'idea ha un fattore Cool alto se avrebbe funzionato. –