Я бы пошел с классом, обертывающим связанный список. Для быстрого и грязного примера для начала см. Код ниже. Конечно, вы захотите добавить другие средства доступа и т. Д. Это даст вам возможность перемещать недавно использованные элементы в начало списка и т. Д.
public class RecentList<T> : IEnumerable<T>
{
private LinkedList<T> _list = new LinkedList<T>();
private int _maxItems;
public RecentList(int maxItems)
{
_maxItems = maxItems;
}
public void Add(T item)
{
_list.AddFirst(item);
if (_list.Count > _maxItems)
{
_list.RemoveLast();
}
}
public IEnumerator<T> GetEnumerator()
{
return _list.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return _list.GetEnumerator();
}
}