Есть ли реализация IDictionary, которая при отсутствии ключа возвращает значение по умолчанию вместо броска? - PullRequest
108 голосов
/ 11 февраля 2009

Индексатор в словаре выдает исключение, если ключ отсутствует. Есть ли реализация IDictionary, которая вместо этого будет возвращать default (T)?

Я знаю о методе TryGetValue, но это невозможно использовать с linq.

Будет ли это эффективно делать то, что мне нужно?:

myDict.FirstOrDefault(a => a.Key == someKeyKalue);

Я не думаю, что это произойдет, поскольку я думаю, что он будет перебирать ключи вместо использования поиска по хэшу.

Ответы [ 12 ]

0 голосов
/ 06 апреля 2016

Как насчет этого однострочного, который проверяет, присутствует ли ключ, используя ContainsKey, а затем возвращает либо нормально полученное значение, либо значение по умолчанию, используя условный оператор?

var myValue = myDictionary.ContainsKey(myKey) ? myDictionary[myKey] : myDefaultValue;

Нет необходимости реализовывать новый класс Dictionary, который поддерживает значения по умолчанию, просто замените ваши операторы поиска короткой строкой выше.

0 голосов
/ 11 февраля 2009

Нет, потому что иначе как бы вы узнали разницу, когда ключ существует, но хранит нулевое значение? Это может быть значительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...