Будет ли работать использование Expression<Func<T>>
или Func<T>
в качестве ключей в словаре? Например для кеширования результата тяжелых вычислений.
Например, немного изменив мой основной кеш с другого вопроса моего:
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();
}
}
Будет ли это вообще работать?
Редактировать: После быстрого теста кажется, что он действительно работает. Но я обнаружил, что это, вероятно, может быть более общим, так как теперь это будет один кеш на тип возврата ... не знаю, как его изменить, чтобы этого не произошло ... хмм
Редактировать 2: Нет, подождите ... на самом деле это не так. Ну, для обычных методов это так. Но не для лямбд. Они получают различные случайные имена методов, даже если они выглядят одинаково. Ну хорошо, с ",)