我正在尝试为缓冲区堆栈做一个缓冲区持有者。
课程是:
缓冲类:
internal class Buffer<T>
{
private T[] buffer;
public Buffer(T[] buffer)
{
this.buffer = buffer;
}
public void clear()
{
Array.Clear(buffer, 0, buffer.Length);
}
public int length()
{
return buffer.Length;
}
}
DataPool类:
internal sealed class DataPool<T> : List<Buffer<T>>
{
public DataPool() : base() {}
}
以及我如何创建bufferList:
public Server
{
DataPool<byte[]> bufferList;
byte[] = buffer;
public Server(...)
{
buffer = new byte[ServerConfig.MaxBufferSize];
this.bufferList = new DataPool<byte[]>();
}
} 一切都好,但我不能将缓冲区添加到bufferList中,如:
bufferList.Add(buffer); //This is not working, why?
我该怎么做?
谢谢!
答案 0 :(得分:2)
这应该有效:
var bufferList = new DataPool<byte>();
bufferList.Add(new Buffer<byte>(buffer));
你必须使用DataPool<byte>
和Buffer<byte>
,因为这会导致Buffer接受一个字节数组,这就是你想要的。
答案 1 :(得分:0)
您还需要创建缓冲区:
bufferList.Add(new Buffer<byte[]>(buffer));
答案 2 :(得分:0)
您的buffer
类型为byte[]
,而bufferList
将继承List<Buffer<byte[]>>
。
尝试
bufferList.Add(new Buffer<byte[]>(buffer));
答案 3 :(得分:0)
如果您在Buffer<byte[]>
和byte[]
之间实现隐式类型转换,也应该可以使用您的代码:
public static implicit operator Buffer<T[]>(T[] ba) // implicit digit to byte conversion operator
{
return new Buffer<T[]>(ba);
}
我没有测试过,但应该可以做到这一点。