我正在使用一种内部调用ConcurrentDictionary.GetOrAdd()
的方法。
我想添加一个ConcurrentDictionary.AddOrUpdate()
调用同样的方法。
但是contains方法只接收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%确定要用于此的标签。如果您认为可以改进,请更新它们。
答案 0 :(得分:1)
使用未使用的参数将其设为lambda:
var updateValueFactory = (Func<String, T, T>)((str, old) => addValueFactory(str));