Есть простой код:
public static TValue GetOrAdd<TKey, TValue>(IDictionary<TKey, TValue> dictionary, TKey key, Func<TKey, TValue> valueCreator)
{
TValue value;
if (dictionary.TryGetValue(key, out value))
return value;
value = valueCreator(key);
dictionary.Add(key, value);
return value;
}
// Использование
Dictionary<int, List<int>> d;
d.GetOrAdd(1, _ => new List<int>()).Add(2); // 1 -> [2]
d.GetOrAdd(1, _ => new List<int>()).Add(3); // 1 -> [2, 3]
Я хочу вместо '_ => new List<int>()' передать функцию которая создавала бы объект:
static Create<T, TParam>(TParam anything) { return new T(); }
d.GetOrAdd(1, Create<List<int>>)
Возможно ли как-нибудь избавится от явного указания типа <List<int>> ?
Т.е. получить простой код вида d.GetOrAdd(1, Create).