计数器不断重置为0

时间:2012-11-05 03:51:12

标签: c# buffer

我正在尝试在C#中创建自己的Circular Buffer。我正在使用计数器来跟踪我需要插入下一个项目的位置。以下是完整代码的Link,以下是执行此操作的(简化)代码:

public class CircularBuffer<T>
{
    private bool _isFull = false;

    private int _size;
    private int _current = 0;

    private BufferItem<T>[] _buffer;

    public CircularBuffer(int size)
    {
        _size = size;
        _buffer = new BufferItem<T>[size];
    }

    public void Insert(T value)
    {
        BufferItem<T> item = new BufferItem<T>(value);
        //Removed code to check if the buffer is full, if so over-write the oldest item
        //and don't insert at the current position
        _buffer[_current] = item;
        _isFull = (_current == (_size - 1));
        _current++;

        //Age all items            
    }

在我增加当前位置并尝试添加另一个项目之前,一切正常并且花花公子:

enter image description here

此处我添加了项目"first",并且当前位置(_current)已递增。

enter image description here

我添加了项目"third",但当前位置被重置为0.除了声明它,访问它并递增它之外,绝对没有其他代码包括_current。 世界上到底发生了什么?以下是BufferItem<T>的代码:

public class BufferItem<T>
{
    public int Age = 0;
    public T Item;

    public BufferItem(T item)
    {
        Item = item;
    }
}

1 个答案:

答案 0 :(得分:1)

你的班级方法很好。您的_current变量也可以正常工作。问题出在CircularBuffer类之外。在实现此功能的地方,有问题的CircularBuffer对象将以某种方式重置。