C#: Is it possible to use expressions or functions as keys in a dictionary?

Posted by Svish on Stack Overflow See other posts from Stack Overflow or by Svish
Published on 2009-07-15T13:54:30Z Indexed on 2010/05/18 2:00 UTC
Read the original article Hit count: 318

Would it work to use Expression<Func<T>> or Func<T> as keys in a dictionary? For example to cache the result of heavy calculations.

For example, changing my very basic cache from a different question of mine a bit:

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();
    }
}

Would this even work?

Edit: After a quick test, it seems like it actually works. But I discovered that it could probably be more generic, since it would now be one cache per return type... not sure how to change it so that wouldn't happen though... hmm

Edit 2: Noo, wait... it actually doesn't. Well, for regular methods it does. But not for lambdas. They get various random method names even if they look the same. Oh well c",)

© Stack Overflow or respective owner

Related posts about c#

Related posts about caching