C# 匿名委托哈希代码

C# 匿名委托哈希代码,c#,caching,delegates,C#,Caching,Delegates,我考虑过创建一些缓存帮助程序来获取Func(或者.Net2.0的一些委托) 计算其哈希代码(或任何其他唯一字符串),如果该代码不存在,则将其添加到缓存中 那有可能吗? 这种方法有意义吗 我如何区分以下两者之间的区别: GetCache(() => string.Format("{0}", 1)); 及 ?您不应该使用哈希代码来确定唯一性。那不是他们来的目的 在您的示例中,两个lambda表达式最终将为委托创建单独的方法。。。但是,即使里面的代码完全相同,他们也很可能(不能保证)会这样做。

我考虑过创建一些缓存帮助程序来获取
Func
(或者.Net2.0的一些委托) 计算其哈希代码(或任何其他唯一字符串),如果该代码不存在,则将其添加到缓存中

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

我如何区分以下两者之间的区别:

GetCache(() => string.Format("{0}", 1));

您不应该使用哈希代码来确定唯一性。那不是他们来的目的


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

问题在于,lamba可能包含来自其范围之外的捕获变量,例如

String.Format("{0}", i);

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

10x。你是说这毫无意义?或者我可以用不同的方式实现它吗?@CD:现在还不完全清楚您是在缓存执行委托的结果还是其他什么。。。但基本上,我怀疑如果您试图从多个代码位使用相同的lambda表达式,您将遇到问题。您是否考虑过改用
Lazy
(如果您使用的是.NET4)?我想缓存执行委托的结果。这个特定的项目正在使用.Net2.0,所以在这里使用Lazy是没有帮助的。有什么想法吗?@CD:我建议你写你自己的《懒惰的代码》,基本上。您基本上需要“众所周知的”惰性计算器,而不是在任意位置指定lambda表达式,我认为这正是您之前所追求的。
String.Format("{0}", i);