Saya perlu menambahkan pasangan kunci / objek ke kamus, tapi tentu saja saya perlu memeriksa dulu apakah kunci sudah ada atau saya mendapatkan kesalahan " kunci sudah ada dalam kamus ". Kode di bawah ini menyelesaikan ini tetapi kikuk.
Apa cara yang lebih elegan untuk melakukan ini tanpa membuat metode string helper seperti ini?
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;
}
}
}
}
sumber
Ada apa dengan...
Ini akan secara otomatis menambahkan kunci jika tidak ada.
sumber
dict[key] += amount
tidak akan berfungsi jika kuncinya tidak adasecara sederhana
Dari dokumentasi MSDN dari Dictionary.Item
Penekanan saya
sumber
Seperti biasa John Skeet tiba di sana dengan kecepatan pencahayaan dengan jawaban yang tepat, tetapi yang menarik Anda juga bisa menulis SafeAdd Anda sebagai Metode Ekstensi pada IDictionary.
sumber
Meskipun menggunakan pengindeks jelas merupakan jawaban yang tepat untuk masalah spesifik Anda, jawaban lain yang lebih umum untuk masalah penambahan fungsionalitas tambahan ke tipe yang ada adalah dengan mendefinisikan metode ekstensi.
Jelas ini bukan contoh yang sangat berguna, tetapi sesuatu yang perlu diingat untuk waktu berikutnya Anda menemukan kebutuhan nyata:
sumber