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()
方法,我还需要一个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));
我正在使用一种在内部调用 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));