我正在使用一种在内部调用 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/