public class RollingList<T> : IEnumerable<T>
{
private readonly LinkedList<T> _list = new LinkedList<T>();
public RollingList(int maximumCount)
{
if (maximumCount <= 0)
throw new ArgumentException(null, nameof(maximumCount));
MaximumCount = maximumCount;
}
public int MaximumCount { get; }
public int Count => _list.Count;
public void Add(T value)
{
if (_list.Count == MaximumCount)
{
_list.RemoveFirst();
}
_list.AddLast(value);
}
public T this[int index]
{
get
{
if (index < 0 || index >= Count)
throw new ArgumentOutOfRangeException();
return _list.Skip(index).First();
}
}
public IEnumerator<T> GetEnumerator() => _list.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}
3条答案
按热度按时间aelbi1ox1#
下面是一个简单的实现:
qmelpv7a2#
Microsoft的标准类不存在。但是你可以观看队列<>类。
Queue<>类自动扩展的一个问题。你可以在线程Limit size of Queue in .NET?中解决这个问题
可以通过扩展方法访问任何元素。举例来说:
vxqlmq5t3#