2

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

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            
    }

在我增加当前位置并尝试添加另一个项目之前,这一切都很好而且很花哨:

在此处输入图像描述

在这里,我添加了项目"first",并且当前位置 ( _current) 增加了。

在此处输入图像描述

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

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

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

1 回答 1

1

你的类方法很好。您的_current变量也可以正常工作。问题出在CircularBuffer课堂之外。在实现这一点的某个地方,有问题的 CircularBuffer 对象正在以某种方式重置。

于 2012-11-05T04:09:14.750 回答