c# - ConcurrentDictionary - 将 addValueFactory (Func<string, T, T> ) 转换为 updateValueFactory (Func<string, T, T>)?

标签 c# delegates concurrentdictionary

我正在使用一种在内部调用 ConcurrentDictionary.GetOrAdd() 的方法.

我想添加一个调用 ConcurrentDictionary.AddOrUpdate() 用同样的方法。

然而,包含方法只收到一个 addValueFactory参数(Func<string, T>)。

调用AddOrUpdate()方法,我还需要一个 updateValueFactory (Func<string, T, T>)。但我不想更改方法签名。

理想情况下,我想使用现有的 addValueFactory创建 updateValueFactory 的函数将产生相同的函数 T结果。

有什么方法可以将 addValueFactory ( Func<string, T> ) 转换为 udpateValueFactory ( Func<string, T, T> )?


public SomeMethod(string key, Func<string, T> addValueFactory)
{
    // existing code
    concurrentDictionary.GetOrAdd(key, addValueFactory)

    // code to add
    // but how to transform (Func<string, T>) into Func<string, T, T>?

    var updateValueFactory = ? 
    concurrentDictionary.AddOrUpdate(key, addValueFactory, updateValueFactory)
}

我不是 100% 确定为此使用什么标签。如果您认为它们可以改进,请更新它们。

最佳答案

只需将其设为带有未使用参数的 lambda:

var updateValueFactory = (Func<String, T, T>)((str, old) => addValueFactory(str));

关于c# - ConcurrentDictionary - 将 addValueFactory (Func<string, T, T> ) 转换为 updateValueFactory (Func<string, T, T>)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35853632/

相关文章:

Swift 使用委托(delegate)类中的函数作为选择器崩溃

ios - 使用 swift 在 WKWebView 上显示事件指示器

cocoa - 使用核心动画的 NSView 显式动画

.net - ConcurrentDictionary TryGetValue 与 []。 [] 仍然是线程安全的吗?

c# - ConcurrentDictionary AddOrUpdate 按谓词

c# - 什么能比并发集合更好地解决这种多线程场景

c# - 使用 AutoMapper 将字符串列表映射到对象列表

c# - 子对象未在父对象上实例化

c# - 使用 ScriptEngine (.NET 3.5) 在 C# 中执行 Selenium python 单元测试时遇到问题

c# - 用于在 C#.net 中获取 javascript 函数的正则表达式