Словарь возвращая значение по умолчанию, если ключ не существует [копирует]

215
задан wasatz 8 April 2010 в 05:04
поделиться

2 ответа

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();
}

(Вы, конечно, можете захотеть включить проверку аргументов :)

278
ответ дан 23 November 2019 в 04:21
поделиться

Нет , ничего подобного не существует. Метод расширения - это лучший вариант, и ваше имя для него ( GetValueOrDefault ) - довольно хороший выбор.

5
ответ дан 23 November 2019 в 04:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: