我正在尝试在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
}
在我增加当前位置并尝试添加另一个项目之前,一切正常并且花花公子:
此处我添加了项目"first"
,并且当前位置(_current
)已递增。
我添加了项目"third"
,但当前位置被重置为0.除了声明它,访问它并递增它之外,绝对没有其他代码包括_current
。
世界上到底发生了什么?以下是BufferItem<T>
的代码:
public class BufferItem<T>
{
public int Age = 0;
public T Item;
public BufferItem(T item)
{
Item = item;
}
}
答案 0 :(得分:1)
你的班级方法很好。您的_current
变量也可以正常工作。问题出在CircularBuffer
类之外。在实现此功能的地方,有问题的CircularBuffer对象将以某种方式重置。