c#集合,自动删除项目

时间:2011-05-07 19:39:25

标签: c# collections

  

可能重复:
  Fixed size queue which automatically dequeues old values upon new enques

是否有一个集合会在添加新项目时自动删除旧项目?假设我有一个限制为十个项目的列表。添加第11项后,第一项被删除,容量保持在10。好像会有这样的事情,但我找不到它。有什么想法吗?

4 个答案:

答案 0 :(得分:4)

实现目标的一种可能方式:

public class FixedSizedQueue<T> : Queue<T>
{
    private readonly int maxQueueSize;
    private readonly object syncRoot = new object();

    public FixedSizedQueue(int maxQueueSize)
    {
        this.maxQueueSize = maxQueueSize;
    }

    public new void Enqueue(T item)
    {
        lock (syncRoot)
        {
            base.Enqueue(item);
            if (Count > maxQueueSize)
                Dequeue(); // Throw away
        }
    }
}

答案 1 :(得分:0)

AFIK,这样的集合不存在。你将不得不自己动手。一种可能性来自ObservableCollection<T>并使用CollectionChanged事件删除“旧”项

答案 2 :(得分:0)

你可以通过自定义编码实现这一目标,看看

//Lets suppose Customer is your custom class 
   public class CustomerCollection : CollectionBase 
    { 
        public Customer this[int index] 
        {
            get
            {
                return (Customer) this.List[index]; 
            } 
            set 
            { 
                this.List[index] = value;
            }
        }
        public void Add(Customer customer)
        { 
           if(this.List.Count > 9)
               this.List.RemoveAt(0);         
           this.List.Add(customer);
        }
    }

答案 3 :(得分:0)

以上答案是正确的;你必须编写自己的代码。

但是,您可以使用引用计数来实现此目的。 link说明.NET如何通过引用计数进行垃圾收集。对于像这样的简单问题,这不是必需的,但从长远来看,它应该对你有所帮助。