2016-03-07 5 views
2

Я работаю с методом, который внутренне вызывает ConcurrentDictionary.GetOrAdd().ConcurrentDictionary - Преобразование addValueFactory (Func <string, T, T>) в updateValueFactory (Func <string, T, T>)?

Я хотел бы добавить звонок в ConcurrentDictionary.AddOrUpdate() insde таким же способом.

Однако метод содержания принимает только параметр 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% уверен, что теги использовать для этого. Пожалуйста, обновите их, если вы считаете, что их можно улучшить.

ответ

1

Просто сделайте это лямбда с неиспользуемого параметра:

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

Спасибо! Это то, что я искал. –

Смежные вопросы