这个泛型类出了什么问题

本文关键字:什么 问题 泛型类 | 更新日期: 2023-09-27 18:20:26

我正在尝试为一个大的缓冲区堆栈做一个Buffer Holder。

类别为:

缓冲等级:

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.Add(buffer); //This is not working, why?

我该怎么做?

谢谢!

这个泛型类出了什么问题

这应该有效:

var bufferList = new DataPool<byte>();
bufferList.Add(new Buffer<byte>(buffer));

您必须使用DataPool<byte>Buffer<byte>,因为这会导致Buffer接受字节数组,而这正是您想要的。

您还需要创建缓冲区:

bufferList.Add(new Buffer<byte[]>(buffer));

您的buffer属于byte[]类型,而您的bufferList将继承List<Buffer<byte[]>>

尝试

bufferList.Add(new Buffer<byte[]>(buffer));

如果在Buffer<byte[]>byte[]:之间实现隐式类型转换,也应该可以按原样使用代码

public static implicit operator Buffer<T[]>(T[] ba)  // implicit digit to byte conversion operator
{
    return new Buffer<T[]>(ba);
}

我还没有测试过,但这种效果应该是可能的。