public byte[] ToArray()
{
// Allocate new byte array.
byte[] buff = new byte[_length];
int buffIdx = 0;
// Calc number of full blocks.
int fullBlockCount = _length / _blockSize;
// Loop full blocks, copying them into buff as we go.
for(int i=0; i<fullBlockCount; i++)
{
byte[] blk = _blockList[i];
Array.Copy(blk, 0, buff, buffIdx, _blockSize);
buffIdx += _blockSize;
}
// Handle final block possibly/probably partially filled.
int tailCount = _length % _blockSize;
if(0 != tailCount)
{
byte[] blk = _blockList[fullBlockCount];
Array.Copy(blk, 0, buff, buffIdx, tailCount);
}
return buff;
}