我考虑过创建一个获得Func<T>
的缓存帮助器(或.Net2.0的某个委托)
计算其哈希码(或任何其他唯一字符串),如果这个代码不存在,则将其添加到缓存中。
这有可能吗? 这种方法有意义吗?
我如何区分:
GetCache(() => string.Format("{0}", 1));
和
GetCache(() => string.Format("{0}", 2))
答案 0 :(得分:2)
您应该不使用哈希码来确定唯一性。那不是他们的目的。
在你的例子中,两个lambda表达式最终将为委托创建单独的方法......但是很可能(不保证)他们仍然会这样做 即使里面的代码也是如此完全一样。换句话说,我认为整个缓存的想法根本不会像你期望的那样发挥作用。
答案 1 :(得分:0)
问题是你的lambas可能包含来自其范围之外的捕获变量,例如。
String.Format("{0}", i);
将根据捕获时的I值进行不同的评估。如果值得做,因为您调用的委托代价很高,您可能需要构建一个包含方法和足够元数据的更高级别对象来找回它们。