Просто используйте индексатор - он перезапишет, если он уже существует, но у него нет , чтобы быть там первым:
Dictionary<string, object> currentViews = new Dictionary<string, object>();
currentViews["Customers"] = "view1";
currentViews["Customers"] = "view2";
currentViews["Employees"] = "view1";
currentViews["Reports"] = "view1";
Обычно используется Добавить
, если наличие ключа указывает на ошибку (поэтому вы хотите, чтобы он выбросил), и индексатор в противном случае. (Это немного похоже на разницу между приведением типов и использованием как
для преобразований ссылок.)
Если вы используете C # 3 и у вас есть отдельный набор ключей , вы можете сделайте это еще аккуратнее:
var currentViews = new Dictionary<string, object>()
{
{ "Customers", "view2" },
{ "Employees", "view1" },
{ "Reports", "view1" },
};
Это не сработает в вашем случае, так как инициализаторы коллекций всегда используют Add
, который бросит вторую запись Customers
.
What's wrong with...
dict[key] = view;
It'll automatically add the key if it's non-existent.
просто
dict[key] = view;
Из документации MSDN Dictionary.Item
Значение, связанное с указанный ключ. Если указанный ключ не найден, операция get вызывает KeyNotFoundException и набор операция создает новый элемент с указанный ключ .
Мое выделение
Хотя использование индексатора, безусловно, является правильным решением вашей конкретной проблемы, это еще один более общий ответ на проблему добавления дополнительных функций к существующему типу означало бы определить метод расширения.
Очевидно, что это не особо полезный пример, но о чем следует помнить в следующий раз, когда вы обнаружите реальную потребность:
public static class DictionaryExtensions
{
public static void SafeAdd<TKey, TValue>(this Dictionary<TKey, TValue> dict,
TKey key, TValue value)
{
dict[key] = value;
}
}
Как обычно, Джон Скит добирается туда со скоростью молнии с правильным ответом, но, что интересно, вы также могли бы написать SafeAdd как метод расширения в IDictionary.
public static void SafeAdd(this IDictionary<K, T>. dict, K key, T value)...