Нет, вы совершенно правы, IMO.
Нет смысла делать:
if (dict.TryGetValue(key, out value))
{
// whatever
}
else
{
throw new SomeException("key '" + key + "' wasn't in dictionary");
}
Единственное преимущество этого:
value = dict[key];
- вы получаете более явное сообщение об исключении ... но ценой удобочитаемости, ИМО.
Это похоже на приведение типов против использования как
- исключение - правильный результат, когда состояние "неправильное", поэтому используйте форму, которая дает такое поведение .
Если ожидается, что ключ отсутствует, использование TryGetValue
обычно приводит к более чистому и эффективному коду. Если ожидается наличие ключа, то обычно лучше использовать прямой доступ для индексирования - исключение указывает на ошибку.
Если отсутствие ключа является исключительным, можно вызвать исключение, imho.
Если это исключительное поведение, когда ключ не существует в вашем словаре (как это звучит), то можно позволить исключению возникать, если ключ не найден и пусть это исключение распространяется вниз по стеку. Если вы хотите использовать защитную практику программирования, вы можете использовать следующее, прежде чем обращаться к ключу словаря:
Debug.Assert(Dictionary.ContainsKey(Key));
Вам действительно нужно использовать TryGetValue только в том случае, если вы ожидаете ситуаций, в которых ключ может не существовать, или если вы хотите иметь определенные запуск кода в случае отсутствия ключа.