Мне нужно добавить пары ключ / объект в словарь, но мне, конечно, нужно сначала проверить, существует ли уже ключ, иначе я получаю ошибку « ключ уже существует в словаре ». Код ниже решает эту проблему, но он неуклюжий.
Каков более элегантный способ сделать это без создания такого вспомогательного метода строки?
using System;
using System.Collections.Generic;
namespace TestDictStringObject
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, object> currentViews = new Dictionary<string, object>();
StringHelpers.SafeDictionaryAdd(currentViews, "Customers", "view1");
StringHelpers.SafeDictionaryAdd(currentViews, "Customers", "view2");
StringHelpers.SafeDictionaryAdd(currentViews, "Employees", "view1");
StringHelpers.SafeDictionaryAdd(currentViews, "Reports", "view1");
foreach (KeyValuePair<string, object> pair in currentViews)
{
Console.WriteLine("{0} {1}", pair.Key, pair.Value);
}
Console.ReadLine();
}
}
public static class StringHelpers
{
public static void SafeDictionaryAdd(Dictionary<string, object> dict, string key, object view)
{
if (!dict.ContainsKey(key))
{
dict.Add(key, view);
}
else
{
dict[key] = view;
}
}
}
}
источник
Что случилось с...
Он автоматически добавит ключ, если его не существует.
источник
dict[key] += amount
не будет работать, если ключ не существуетпросто
Из документации MSDN Dictionary.Item
Мой акцент
источник
Как обычно, Джон Скит с молниеносной скоростью попадает туда с правильным ответом, но, что интересно, вы также могли написать свой SafeAdd как метод расширения в IDictionary.
public static void SafeAdd(this IDictionary<K, T>. dict, K key, T value)...
источник
Хотя использование индексатора, безусловно, является правильным ответом на вашу конкретную проблему, другим более общим ответом на проблему добавления дополнительных функций к существующему типу будет определение метода расширения.
Очевидно, что это не особенно полезный пример, но о чем следует помнить в следующий раз, когда вы обнаружите реальную потребность:
public static class DictionaryExtensions { public static void SafeAdd<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue value) { dict[key] = value; } }
источник