protected virtual void Find(TKey key, Action <KeyValueNode <TKey, TValue> > onSuccess, Action onFailed) { if (!IsEmpty) { for (KeyValueNode <TKey, TValue> node = first; node != null; node = node.next) { if (node.Key.Equals(key)) { onSuccess?.Invoke(node); return; } } } onFailed?.Invoke(); }
public override void Delete(TKey key) { if (!IsEmpty) { if (first.Key.Equals(key)) { first = first.next; size--; return; } for (KeyValueNode <TKey, TValue> node = first; node.next != null; node = node.next) { if (node.next.Key.Equals(key)) { node.next = node.next.next; size--; return; } } } throw new KeyNotFoundException("在表中找不到键" + key); }
public override void Put(TKey key, TValue value) { Find(key, node => node.Value = value, () => first = new KeyValueNode <TKey, TValue>(key, value, first)); size++; }
public ValueEnumerator(KeyValueNode <TKey, TValue> first) : base(first) { }
public virtual void Dispose() { first = null; current = null; }
public virtual void Reset() { current = null; }
public virtual bool MoveNext() { current = current == null ? first : current.next; return(current != null); }
public Enumerator(KeyValueNode <TKey, TValue> first) { this.first = first ?? throw new ArgumentNullException(); current = null; }
public KeyValueNode(TKey key, TValue value, KeyValueNode <TKey, TValue> next) : base(key, value) { this.next = next; }