2012-01-15 11 views
0

大きなバッファースタック用にバッファーホルダーを作成しようとしています。このジェネリッククラスで何が問題になりますか?

バッファクラス::

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

データプールクラス:

とクラスがある

public Server 
{ 
    DataPool<byte[]> bufferList; 
    byte[] = buffer; 

    public Server(...) 
    {  
     buffer = new byte[ServerConfig.MaxBufferSize]; 
     this.bufferList = new DataPool<byte[]>(); 
    } 

}:

internal sealed class DataPool<T> : List<Buffer<T>> 
{ 
    public DataPool() : base() {} 
} 

と私はbufferListを作成する方法3210すべてがOKですが、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

bufferbyte[]で、bufferListList<Buffer<byte[]>>を継承します。

あなたはBuffer<byte[]>byte[]間の暗黙の型変換を実装する場合、またそれがあるとして、あなたのコードを使用することが可能でなければなりません

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

試してみてくださいは:

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

私はそれをテストしていませんが、そのような効果があるはずです。

関連する問題