Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
 public override void Put(TKey key, TValue value)
 {
     Find(key, node => node.Value = value,
          () => first             = new KeyValueNode <TKey, TValue>(key, value, first));
     size++;
 }
Example #4
0
 public ValueEnumerator(KeyValueNode <TKey, TValue> first) : base(first)
 {
 }
Example #5
0
 public virtual void Dispose()
 {
     first   = null;
     current = null;
 }
Example #6
0
 public virtual void Reset()
 {
     current = null;
 }
Example #7
0
 public virtual bool MoveNext()
 {
     current = current == null ? first : current.next;
     return(current != null);
 }
Example #8
0
 public Enumerator(KeyValueNode <TKey, TValue> first)
 {
     this.first = first ?? throw new ArgumentNullException();
     current    = null;
 }
Example #9
0
 public KeyValueNode(TKey key, TValue value, KeyValueNode <TKey, TValue> next) : base(key, value)
 {
     this.next = next;
 }