作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何编写具有这种形式的函数:
A(key, B(key, C(key, ValFactory(key))))
其中 A、B 和 C 具有此签名:
TResult GetOrAdd(string key, Func<string, TResult> generator);
Valfactory 有签名:
TResult Get(string key);
顺便说一句,“链接”函数的数量没有限制,因此它可以是 A、B 或 A、B、C 或 A、B、C、D、E 等。
我将函数 A、B、C 等存储在一个 LinkedList 中
我该如何调用它们?
编辑 添加一些信息以进行说明:
我需要它来实现多级缓存。有几种不同的缓存都实现了“GetOrAdd”功能。一级缓存只是一个已经具有 GetOrAdd 函数的 ConcurrentDictionary。
缓存的工作方式是,如果一级缓存没有特定键的条目,它会尝试在二级缓存中查找。二级缓存在未命中等情况下查看三级缓存。
任何缓存都不应该知道另一个缓存,它应该只实现签名 TResult GetOrAdd(string, Func<string, TResult> functionToCallOnCacheMiss)
最佳答案
如果您将每个 Func 存储在一个链表中,为什么不直接遍历该列表并使用先前的结果调用下一个 func?
关于c# - 如何在 C# 中编写一个看起来像 A(key, B(key, C(key, ValFactory(key)))) 的递归函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983247/
我是一名优秀的程序员,十分优秀!