这个泛型类有什么问题吗?

时间:2012-01-15 23:46:28

标签: c# generics

我正在尝试为缓冲区堆栈做一个缓冲区持有者。

课程是:

缓冲类:

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?

我该怎么做?

谢谢!

4 个答案:

答案 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);
}

我没有测试过,但应该可以做到这一点。