EDIT: Es stellt sich heraus, dass .NET fait haben bereits eine Kombination aus Liste und Wörterbuch: OrderedDictionary
. Leider handelt es sich um einen nicht-generischen Typ, was ihn meiner Meinung nach etwas weniger attraktiv macht. Allerdings wird die Einfügereihenfolge beibehalten, wenn Sie einfach Add
wiederholt.
Es ist ein wenig seltsam, wenn man anruft Add
fait pas auf Einträge auswirken, für die bereits ein Schlüssel existiert, während die Verwendung des Indexers zum Hinzufügen eines Schlüssel/Wert-Paares eine frühere Zuordnung überschreibt. Im Grunde scheint es keine besonders schöne API zu sein, und ich persönlich würde es immer noch vermeiden, es sei denn, Ihr Anwendungsfall genau seinem Verhalten entspricht.
Nein, .NET hat keine einfügungsreihenfolge-erhaltenden Wörterbücher. Sie könnten immer Ihren eigenen listenbasierten Typ mit dem entsprechenden Add
Methode. Dies könnte sogar eine der wenigen Stellen sein, an denen ich eine Erweiterung eines bestehenden Typs in Betracht ziehen würde:
public class KeyValueList<TKey, TValue> : List<KeyValuePair<TKey, TValue>>
{
public void Add(TKey key, TValue value)
{
Add(new KeyValuePair<TKey, TValue>(key, value));
}
}
Dann:
var list = new KeyValueList<string, string>
{
{ "key1", "value1"},
{ "key2", "value2"}
};
Eine Alternative ist die Verwendung der Komposition, aber meine Bauchgefühl ist, dass dies eine sinnvolle Nutzung der Vererbung ist. Ich kann nicht sagen, warum ich in diesem Fall glücklich bin, aber normalerweise nicht, wohlgemerkt...