Feedback

C# - Add Key-Value return old Value

Veröffentlicht von am 9/2/2010
(3 Bewertungen)
Da wir immer noch im Umfeld von Framework 2 arbeiten hier die Möglichkeit ein Dictionary interessant zu "erweitern".

Wenn man in ein Dictionary einen Key einfügen will, der bereits enthalten ist, wirft das Dictionary eine Exception. Daher muss man immer abfangen ob denn der neue Key schon drin ist. Wenn ja, dann muss man normalerweise das alte Key/Value-Paar entfernen und as neue einfügen.

Da dies recht oft vorkommt hier ein erweitertes Dictionary, das eine Methode anbietet, die etwas "gefälliger" ist.

Als Rückgabewert erhällt man "null" (bzw. den default) oder den alten Wert.

Das ganze verhällt sich damit so ähnlich wie eine Hashmap in Java
using System;
using System.Collections.Generic;
using System.Text;

namespace mein.namespacedings
{
    public class DictionaryPlus<K, T> : Dictionary<K, T>
    {
        /// <summary>
        /// Erweitert das normale Dictionary um die Möglichkeit
        /// ein Key-Value Paar hinzuzufügen und den (falls vorhanden)
        /// bereits unter dem Schlüssel eingetragenen Value zurück zu
        /// bekommen.
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <returns></returns>
        public T AddReturnOld(K key,T value) 
        {
            T result = default(T);

            if (this.ContainsKey(key))
            {
                result = this[key];
                this.Remove(key);
            }
            this.Add(key, value);

            return result;
        }
    }
}
Abgelegt unter Dictionary, key, value, Generic.

3 Kommentare zum Snippet

Christopher Kk schrieb am 9/3/2010:
Wo ist denn mein Kommentar hin?
Christopher Kk schrieb am 9/3/2010:
Hmm anscheind wurde er nicht veröffentlicht. Komisch. Nagut dann schreib ich ihn nochmal.

Wenn ich deinen Text so lese, scheint es mir so als wenn du die falsche Datenstruktur für deine Ansprüche genutzt hast. Wenn dir daran liegt das du mehrfache Vorkommen eines Keys haben willst, dann solltest du eine List<KeyValuePair<K,T>> nehmen. Aber ein Dictionary zu benutzen und dann aber versuchen zu wollen mehrfach vorkommen auf diese Dictionary zu zwingen, ist einfach die Falsche rangehensweiße.
Rüdiger Vossel schrieb am 9/6/2010:
@Christopher: Es ist schon gedacht eine Eindeutiggkeit des Keys zu nutzen. In meinem "Alltag" taucht es immer wieder auf, dass ich (als Beispiel gedacht) Daten auf einen Key verdichten muss. Diese Verdichtung läuft hiermit einfach etwas einfacher.
 

Logge dich ein, um hier zu kommentieren!