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

ConcurrentDictionary - Converting addValueFactory (Func<string, T, T> ) into an updateValueFactory (Func<string, T, T>)?

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

我想在相同方法中添加对 ConcurrentDictionary.AddOrUpdate() 的调用。

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

要调用AddOrUpdate()方法,我还需要一个updateValueFactoryFunc<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));