.NET有一个简单的方法来执行溢出列表吗?

时间:2011-11-25 20:06:13

标签: c# .net list generics

我想在我的应用程序中添加一个“最近打开”的功能,并且想知道是否有一种简单的内置方式来执行“溢出”的列表。我的意思是,当你添加一个超出列表容量的元素时,所有的项都会被移动。

所需功能的代码示例(显然不是这样,列表实际上包含A,B,C):

List<string> list = new List<string>();

//if Overflow was 2

list.Add("A");
list.Add("B");
//List now contains A,B
list.Add("C");
//List now contains B,C

抱歉这个简单的问题。问题本身是显而易见的(入门计划是从List继承),我只是不喜欢重新发明轮子,并在语言或框架具有该功能时将未来的程序员与自定义对象混淆。

3 个答案:

答案 0 :(得分:5)

据我所知,图书馆里没有这样的收藏品 您可以根据List<>或数组轻松编写此代码。

// untested
class OverFlowList<T>
{
    T[] _data;
    int _next = 0;

    public OferflowList(int limit)
    {
        _data = new T[limit];
    }

    void Add(T item)
    {
        _data[_next] = item;
        _next = (_next + 1) % _data.Length;
    }    
}

答案 1 :(得分:4)

您可以使用LinkedList<T>轻松完成此操作:

LinkedList<string> list = new LinkedList<string>();

//if Overflow was 2
list.AddFirst("A");
list.AddFirst("B");
list.AddFirst("C");
list.RemoveLast();

我个人会把它包装成一个你可以使用的类,即:

public class OverflowCollection<T> : IEnumerable<T>
{
    private int max;
    private LinkedList<T> list = new LinkedList<T>();

    public OverflowCollection(int maxItems)
    {
        this.max = maxItems;
    }

    public void Add(T item)
    {
        this.list.AddFirst(item);
        if (this.list.Count > max)
           this.list.RemoveLast();
    }

    // Implement IEnumerable<T> by returning list's enumerator...
}

这提供了一种非常简单的方法,它具有一些很好的优点,包括能够在运行时更改过载量等。

答案 2 :(得分:0)

使用实施 IList 的自定义类,然后在实施添加方法时检查您的约束并执行此操作。