可能重复:
Fixed size queue which automatically dequeues old values upon new enques
是否有一个集合会在添加新项目时自动删除旧项目?假设我有一个限制为十个项目的列表。添加第11项后,第一项被删除,容量保持在10。好像会有这样的事情,但我找不到它。有什么想法吗?
答案 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如何通过引用计数进行垃圾收集。对于像这样的简单问题,这不是必需的,但从长远来看,它应该对你有所帮助。