Svi*_*ish 7 c# lambda caching dictionary
是否可以使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
这甚至会起作用吗?
编辑:经过快速测试后,它似乎确实有效.但我发现它可能更通用,因为它现在每个返回类型一个缓存...不知道如何更改它以便不会发生...嗯
编辑2: Noo,等等......实际上并没有.嗯,对于常规方法,它确实如此.但不适用于lambdas.即使它们看起来相同,它们也会获得各种随机方法名称.哦,好吧c",)
您可以使用任何类型的对象,只要它是实例即可。即使是代表,但我不建议使用代表作为键,因为它们不是为此设计的。我不确定独立创建的委托会产生相同的哈希码,如果可以比较(可相等),甚至会更少。
归档时间: |
|
查看次数: |
1494 次 |
最近记录: |