/// <summary>
 /// Equality
 /// </summary>
 /// <param name="other"></param>
 /// <returns></returns>
 public bool Equals(CircularStackElement <T> other)
 {
     if (ReferenceEquals(this, other))
     {
         return(true);
     }
     if (other is null || this is null)
     {
         return(false);
     }
     return(EqualityComparer <T> .Default.Equals(_value, other._value) &&
            EqualityComparer <T> .Default.Equals(Next._value, other.Next._value) &&
            EqualityComparer <T> .Default.Equals(Previous._value, other.Previous._value));
 }
예제 #2
0
        /// <summary>
        /// Add to the stack
        /// </summary>
        /// <param name="value"></param>
        public void Add(T value)
        {
            if (value.IsNull())
            {
                throw new ArgumentNullException($"Can't add a null {typeof(T)} to a Circular stack");
            }
            var newData = new CircularStackElement <T>(value)
            {
                Parent = this
            };

            if (_data.Count > 0)
            {
                AssignPreviousAndNext(newData, _data[0]);
                AssignPreviousAndNext(_data[^ 1], newData);
 private static CircularStackElement <T> GetCurrent(Action <CircularStackElement <T> > todo, CircularStackElement <T> current)
 {
     todo.Invoke(current);
     return(current.Next);
 }