c# Adding a Remove(int index) method to the .NET Queue class

前端 未结 12 1530
攒了一身酷
攒了一身酷 2021-01-07 17:14

I would like to use the generic queue class as described in the .NET framework (3.5) but I will need a Remove(int index) method to remove items from the queue. Can I achieve

12条回答
  •  生来不讨喜
    2021-01-07 17:46

    Combining both casperOne's and David Anderson's suggestions to the next level. The following class inherits from List and hides the methods that would be detrimental to the FIFO concept while adding the three Queue methods (Equeue, Dequeu, Peek).

    public class ListQueue : List
    {
        new public void Add(T item) { throw new NotSupportedException(); }
        new public void AddRange(IEnumerable collection) { throw new NotSupportedException(); }
        new public void Insert(int index, T item) { throw new NotSupportedException(); }
        new public void InsertRange(int index, IEnumerable collection) { throw new NotSupportedException(); }
        new public void Reverse() { throw new NotSupportedException(); }
        new public void Reverse(int index, int count) { throw new NotSupportedException(); }
        new public void Sort() { throw new NotSupportedException(); }
        new public void Sort(Comparison comparison) { throw new NotSupportedException(); }
        new public void Sort(IComparer comparer) { throw new NotSupportedException(); }
        new public void Sort(int index, int count, IComparer comparer) { throw new NotSupportedException(); }
    
        public void Enqueue(T item)
        {
            base.Add(item);
        }
    
        public T Dequeue()
        {
            var t = base[0]; 
            base.RemoveAt(0);
            return t;
        }
    
        public T Peek()
        {
            return base[0];
        }
    }
    

    Test code:

    class Program
    {
        static void Main(string[] args)
        {
            ListQueue queue = new ListQueue();
    
            Console.WriteLine("Item count in ListQueue: {0}", queue.Count);
            Console.WriteLine();
    
            for (int i = 1; i <= 10; i++)
            {
                var text = String.Format("Test{0}", i);
                queue.Enqueue(text);
                Console.WriteLine("Just enqueued: {0}", text);
            }
    
            Console.WriteLine();
            Console.WriteLine("Item count in ListQueue: {0}", queue.Count);
            Console.WriteLine();
    
            var peekText = queue.Peek();
            Console.WriteLine("Just peeked at: {0}", peekText);
            Console.WriteLine();
    
            var textToRemove = "Test5";
            queue.Remove(textToRemove);
            Console.WriteLine("Just removed: {0}", textToRemove);
            Console.WriteLine();
    
            var queueCount = queue.Count;
            for (int i = 0; i < queueCount; i++)
            {
                var text = queue.Dequeue();
                Console.WriteLine("Just dequeued: {0}", text);
            }
    
            Console.WriteLine();
            Console.WriteLine("Item count in ListQueue: {0}", queue.Count);
    
            Console.WriteLine();
            Console.WriteLine("Now try to ADD an item...should cause an exception.");
            queue.Add("shouldFail");
    
        }
    }
    

提交回复
热议问题