.NET: Добавление объекта словаря - проверка, если это существует или позволяет исключение?

Насколько я знаю, Вы не можете только сделать это кратким обзором?

class parent {
public:
  virtual void handle_event(int something) const = 0 {
    // boring default code
  }
};

я думал, что читал на www.parashift.com, что можно на самом деле реализовать абстрактный метод. Который имеет смысл мне лично, единственная вещь, которую он делает, вынудить подклассы реализовать его, никто ничего не сказал об этом не позволяемый иметь саму реализацию.

15
задан ScottE 12 September 2009 в 00:26
поделиться

5 ответов

Как подойти к этому, зависит от того, что вы хотите сделать в случае столкновения. Если вы хотите сохранить первое вставленное значение, вы должны использовать ContainsKey для проверки перед вставкой. Если, с другой стороны, вы хотите использовать значение last для этого ключа, вы можете сделать так:

// c# sample:
myDictionary[key] = value;

В качестве примечания: я бы, вероятно, по возможности использовал Dictionary <строка, строка> вместо StringDictionary . Если ничего другого, это даст вам доступ к еще нескольким методам расширения Linq.

16
ответ дан 1 December 2019 в 01:38
поделиться

Я бы провёл проверку "Содержит".

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

7
ответ дан 1 December 2019 в 01:38
поделиться

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

5
ответ дан 1 December 2019 в 01:38
поделиться

Если это не очень большой словарь или не критический внутренний цикл кода, вы, вероятно, не заметите разницы.

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

Если вы действительно хотите иметь возможность управлять повторяющимися ключами, вы можете посмотреть на MultiDictionary в PowerCollections

2
ответ дан 1 December 2019 в 01:38
поделиться

Я стараюсь избегать исключений везде, где могу - они дороги в обращении и могут усложнить код. Поскольку вы знаете, что коллизия возможна, и выполнить проверку .Contains тривиально, я бы сделал это.

-1
ответ дан 1 December 2019 в 01:38
поделиться
Другие вопросы по тегам:

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