2012-01-15 6 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; 
    } 
} 

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

Не уверен, что ваш запрос, но эта строка 'byte [] = buffer;' должна быть без знака '='. – user1231231412

ответ

2

Это должно работать:

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

Вы должны использовать DataPool<byte> и Buffer<byte>, так что заставляет буфер принимать массив байтов, который это то, что вы хотите.

+0

Спасибо, он отлично работает! – Racooon

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

Я не проверял, но что-то на этот счет должно быть возможным.