ConcurrentDictionary - 将addValueFactory(Func <string,t,=“”t =“”>)转换为updateValueFactory(Func <string,t,=“”t =“”>)?

时间:2016-03-07 20:43:26

标签: c# delegates concurrentdictionary

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

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

但是contains方法只接收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%确定要用于此的标签。如果您认为可以改进,请更新它们。

1 个答案:

答案 0 :(得分:1)

使用未使用的参数将其设为lambda:

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