Serait-il utile d'utiliser Expression<Func<T>>
ou Func<T>
comme clés dans un dictionnaire? Par exemple pour mettre en cache le résultat de calculs lourds.C#: Est-il possible d'utiliser des expressions ou des fonctions en tant que clés dans un dictionnaire?
Par exemple, le changement de mon cache de base d'un different question de mes un peu:
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();
}
}
Est-ce que ce même travail?
Modifier: Après un test rapide, il semble que cela fonctionne réellement. Mais j'ai découvert qu'il pourrait probablement être plus générique, car il serait désormais un cache par type de retour ... pas sûr comment le changer de sorte que cela ne se produira pas si ... hmm
Edit 2 : Non, attendez ... ce n'est pas le cas. Eh bien, pour les méthodes régulières, c'est le cas. Mais pas pour les lambdas. Ils obtiennent divers noms de méthodes aléatoires, même s'ils se ressemblent. Eh bien c »,)
Pourquoi faites-vous cela? –
Je ne suis pas. J'ai juste trébuché sur la pensée tout en trouvant la substance de cache dans mon autre question et suis devenu curieux :) – Svish
Les points bonis pour la curiosité investigatrice, mais je ne peux pas vraiment voir n'importe quelle application réelle pour la technique. D'autre part, l'idée a un facteur de refroidissement élevé si cela aurait fonctionné. –