我考虑创建一些缓存助手来获取Func<T> (或.Net2.0的某个委托),计算其散列代码(或任何其他唯一的字符串),如果没有代码,则将其添加到缓存中。
这有可能吗?这种方法有意义吗?
我如何区分:
GetCache(() => string.Format("{0}", 1));和
GetCache(() => string.Format("{0}", 2))发布于 2011-05-20 16:10:34
不应使用哈希码来确定唯一性。这不是他们在那里的目的。
在您的示例中,两个lambda表达式将最终为委托创建单独的方法...但是,即使其中的代码完全相同,他们也很有可能(不能保证)会这样做。换句话说,我认为整个缓存的想法根本不会像你期望的那样工作。
发布于 2011-05-20 16:57:48
问题是您的lambas可能包含来自其作用域之外的捕获变量,例如
String.Format("{0}", i);将根据捕获时i的值进行不同的计算。如果这是值得的,因为您调用的委托是昂贵的,您可能需要构建一个更高级别的对象,其中包含您的方法和足够的元数据来找到它们。
https://stackoverflow.com/questions/6069030
复制相似问题