.NET 3.5 bietet keine generische Implementierung von OrderedDictionary (aus dem System.Collections.Specialized-Namespace).
Es gibt bekannte Implementierungen, die diese Funktionalität bereitstellen können, aber es ist unklar, warum diese Implementierung nicht enthalten ist sofort einsatzbereit und ob es in .NET 4.0 enthalten sein wird.
Die Implementierung eines generischen OrderedDictionary ist nicht komplex, kann aber zeitaufwändig sein. Hier ist eine Lösung mit einer KeyedCollection für den internen Speicher:
public interface IOrderedDictionary<TKey, TValue> : IDictionary<TKey, TValue>, IOrderedDictionary { new TValue this[int index] { get; set; } new TValue this[TKey key] { get; set; } new int Count { get; } new ICollection<TKey> Keys { get; } new ICollection<TValue> Values { get; } new void Add(TKey key, TValue value); new void Clear(); void Insert(int index, TKey key, TValue value); int IndexOf(TKey key); bool ContainsValue(TValue value); bool ContainsValue(TValue value, IEqualityComparer<TValue> comparer); new bool ContainsKey(TKey key); new IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator(); new bool Remove(TKey key); new void RemoveAt(int index); new bool TryGetValue(TKey key, out TValue value); TValue GetValue(TKey key); void SetValue(TKey key, TValue value); KeyValuePair<TKey, TValue> GetItem(int index); void SetItem(int index, TValue value); }
public class OrderedDictionary<TKey, TValue> : IOrderedDictionary<TKey, TValue> { private KeyedCollection2<TKey, KeyValuePair<TKey, TValue>> _keyedCollection; public TValue this[TKey key] { get { return GetValue(key); } set { SetValue(key, value); } } public TValue this[int index] { get { return GetItem(index).Value; } set { SetItem(index, value); } }
Das obige ist der detaillierte Inhalt vonWarum gibt es in .NET 3.5 kein generisches OrderedDictionary und wie kann ich eines implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!