Ich muss einem Wörterbuch Schlüssel / Objekt-Paare hinzufügen, aber ich muss natürlich zuerst prüfen, ob der Schlüssel bereits vorhanden ist, andernfalls wird der Fehler " Schlüssel ist bereits im Wörterbuch vorhanden " angezeigt. Der folgende Code löst dies, ist aber klobig.
Was ist eleganter, um dies zu tun, ohne eine solche String-Helfer-Methode zu entwickeln?
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;
}
}
}
}
quelle
Was ist falsch mit...
Der Schlüssel wird automatisch hinzugefügt, wenn er nicht vorhanden ist.
quelle
dict[key] += amount
nicht funktioniert, wenn der Schlüssel nicht existierteinfach
Aus der MSDN-Dokumentation von Dictionary.Item
Mein Schwerpunkt
quelle
Wie üblich steigt John Skeet mit Lichtgeschwindigkeit und der richtigen Antwort ein, aber interessanterweise hätten Sie Ihre SafeAdd auch als Erweiterungsmethode in IDictionary schreiben können.
quelle
Obwohl die Verwendung des Indexers eindeutig die richtige Antwort für Ihr spezifisches Problem ist, besteht eine weitere allgemeinere Antwort auf das Problem, einem vorhandenen Typ zusätzliche Funktionen hinzuzufügen, darin, eine Erweiterungsmethode zu definieren.
Offensichtlich ist dies kein besonders nützliches Beispiel, aber etwas, das Sie beachten sollten, wenn Sie das nächste Mal einen echten Bedarf finden:
quelle