具有自动删除项功能的 C# 集合

本文关键字:功能 集合 删除 | 更新日期: 2023-09-27 17:55:55

可能的重复项:
固定大小队列,可在新值时自动取消旧值的队列

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

具有自动删除项功能的 C# 集合

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

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
        }
    }
}

您可以通过自定义编码来实现这一点,请查看

//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);
        }
    }

AFIK,这样的集合不存在。 你将不得不自己滚动。 一种可能性是从ObservableCollection<T>派生并使用 CollectionChanged 事件删除"旧"项

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

但是,您可以使用引用计数来实现这一点。 该链接说明了 .NET 如何通过引用计数进行垃圾回收。对于像这样的简单问题,这不是必需的,但从长远来看,它可能会对您有所帮助。