Preciso adicionar pares de chave / objeto a um dicionário, mas é claro que preciso primeiro verificar se a chave já existe, caso contrário, recebo o erro " chave já existe no dicionário ". O código abaixo resolve isso, mas é desajeitado.
Qual é a maneira mais elegante de fazer isso sem criar um método auxiliar de string como este?
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;
}
}
}
}
fonte
O que há de errado com...
Ele adicionará automaticamente a chave se ela não existir.
fonte
dict[key] += amount
não vai funcionar se a chave não existesimplesmente
Na documentação do Dictionary.Item da MSDN
Minha ênfase
fonte
Como sempre, John Skeet chega lá com velocidade de iluminação com a resposta certa, mas, curiosamente, você também pode ter escrito seu SafeAdd como um método de extensão no IDictionary.
fonte
Embora o uso do indexador seja claramente a resposta certa para o seu problema específico, outra resposta mais geral ao problema de adicionar funcionalidade adicional a um tipo existente seria definir um método de extensão.
Obviamente, este não é um exemplo particularmente útil, mas algo a ser lembrado na próxima vez que você encontrar uma necessidade real:
fonte