【发布时间】:2009-07-15 13:54:30
【问题描述】:
使用Expression<Func<T>> 或Func<T> 作为字典中的键是否有效?例如缓存繁重计算的结果。
例如,稍微改变一下我的 different question 的基本缓存:
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: 不,等等……它实际上没有。好吧,对于常规方法,它确实如此。但不适用于 lambda。即使它们看起来相同,它们也会获得各种随机方法名称。哦,好c”,)
【问题讨论】:
-
我不是。在我的另一个问题中弄清楚缓存的内容时,我只是偶然发现了这个想法并且很好奇:)
-
对调查好奇心的奖励积分,但我真的看不出该技术有任何实际应用。另一方面,如果可行的话,这个想法确实具有很高的酷炫因素。
-
...如果这个东西有一个确定性的结果,那就是。
-
呵呵。不确定的结果确实会降低凉爽系数,是的:p
标签: c# caching dictionary lambda