Я должен всегда использовать TryGetValue для доступа к .net Dictionaries?

wmic OS get FreePhysicalMemory /Value
9
задан Community 23 May 2017 в 12:03
поделиться

4 ответа

Нет, вы совершенно правы, IMO.

Нет смысла делать:

if (dict.TryGetValue(key, out value))
{
    // whatever
}
else
{
    throw new SomeException("key '" + key + "' wasn't in dictionary");
}

Единственное преимущество этого:

value = dict[key];

- вы получаете более явное сообщение об исключении ... но ценой удобочитаемости, ИМО.

Это похоже на приведение типов против использования как - исключение - правильный результат, когда состояние "неправильное", поэтому используйте форму, которая дает такое поведение .

13
ответ дан 4 December 2019 в 13:05
поделиться

Если ожидается, что ключ отсутствует, использование TryGetValue обычно приводит к более чистому и эффективному коду. Если ожидается наличие ключа, то обычно лучше использовать прямой доступ для индексирования - исключение указывает на ошибку.

2
ответ дан 4 December 2019 в 13:05
поделиться

Если отсутствие ключа является исключительным, можно вызвать исключение, imho.

1
ответ дан 4 December 2019 в 13:05
поделиться

Если это исключительное поведение, когда ключ не существует в вашем словаре (как это звучит), то можно позволить исключению возникать, если ключ не найден и пусть это исключение распространяется вниз по стеку. Если вы хотите использовать защитную практику программирования, вы можете использовать следующее, прежде чем обращаться к ключу словаря:

Debug.Assert(Dictionary.ContainsKey(Key));

Вам действительно нужно использовать TryGetValue только в том случае, если вы ожидаете ситуаций, в которых ключ может не существовать, или если вы хотите иметь определенные запуск кода в случае отсутствия ключа.

0
ответ дан 4 December 2019 в 13:05
поделиться
Другие вопросы по тегам:

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