首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匿名委派hashCode

匿名委派hashCode
EN

Stack Overflow用户
提问于 2011-05-20 15:56:22
回答 2查看 335关注 0票数 0

我考虑创建一些缓存助手来获取Func<T> (或.Net2.0的某个委托),计算其散列代码(或任何其他唯一的字符串),如果没有代码,则将其添加到缓存中。

这有可能吗?这种方法有意义吗?

我如何区分:

代码语言:javascript
复制
GetCache(() => string.Format("{0}", 1));

代码语言:javascript
复制
GetCache(() => string.Format("{0}", 2))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-20 16:10:34

不应使用哈希码来确定唯一性。这不是他们在那里的目的。

在您的示例中,两个lambda表达式将最终为委托创建单独的方法...但是,即使其中的代码完全相同,他们也很有可能(不能保证)会这样做。换句话说,我认为整个缓存的想法根本不会像你期望的那样工作。

票数 2
EN

Stack Overflow用户

发布于 2011-05-20 16:57:48

问题是您的lambas可能包含来自其作用域之外的捕获变量,例如

代码语言:javascript
复制
String.Format("{0}", i);

将根据捕获时i的值进行不同的计算。如果这是值得的,因为您调用的委托是昂贵的,您可能需要构建一个更高级别的对象,其中包含您的方法和足够的元数据来找到它们。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6069030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档