具有自动删除项功能的 C# 集合
本文关键字:功能 集合 删除 | 更新日期: 2023-09-27 17:55:55
可能的重复项:
固定大小队列,可在新值时自动取消旧值的队列
是否有像集合这样的东西,它会在添加新项目时自动删除旧项目? 假设我有一个限制为十个项目的列表。 添加第 11 个项目后,第一个项目将被删除,容量保持为 10。 似乎会有这样的事情,但我找不到。 有什么想法吗?
实现目标的一种可能方法:
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 如何通过引用计数进行垃圾回收。对于像这样的简单问题,这不是必需的,但从长远来看,它可能会对您有所帮助。