TryGetValue
уже присвоит значение по умолчанию для типа словарю, поэтому вы можете просто использовать:
dictionary.TryGetValue(key, out value);
и просто игнорировать возвращаемое значение. Однако на самом деле вернет только default(TValue)
, а не какое-то пользовательское значение по умолчанию (или, что более полезно, результат выполнения делегата). Ничего более мощного в фреймворк не встроено. Я бы предложил два метода расширения:
public static TValue GetValueOrDefault<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key,
TValue defaultValue)
{
TValue value;
return dictionary.TryGetValue(key, out value) ? value : defaultValue;
}
public static TValue GetValueOrDefault<TKey, TValue>
(this IDictionary<TKey, TValue> dictionary,
TKey key,
Func<TValue> defaultValueProvider)
{
TValue value;
return dictionary.TryGetValue(key, out value) ? value
: defaultValueProvider();
}
(Вы, конечно, можете захотеть включить проверку аргументов :)
Нет , ничего подобного не существует. Метод расширения - это лучший вариант, и ваше имя для него ( GetValueOrDefault ) - довольно хороший выбор.