2012-01-15 90 views
0

我正在尝试为缓冲区大的缓冲区做缓冲区。这个泛型类有什么问题?

而且类是:

Buffer类:

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; 
    } 
} 

数据池类:

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? 

我该怎么办?

谢谢!

+0

不知道你的问题,但这行'byte [] = buffer;'应该没有'='符号。 – user1231231412 2012-01-15 23:50:15

回答

2

这应该工作:

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

你必须使用DataPool<byte>Buffer<byte>,因为这会导致缓冲区接受一个字节数组,这是你想要的。

+0

谢谢,它工作正常! – Racooon 2012-01-15 23:54:18

0

您需要创建缓冲区,以及:

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

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

尝试

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

还应该可以使用你的代码,因为它是,如果你实现Buffer<byte[]>byte[]之间的隐式类型转换:

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

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