2015-08-11 2 views
1

Простейший пример. Я пытаюсь создать очереди байтового массива, как что:Очередь байтовых массивов проблема

 Queue<Byte[]> q = new Queue<Byte[]>(); 
     Byte[] block = new Byte[1]; 
     block[0] = 1; 
     q.Enqueue(block); 
     block[0] = 2; 
     q.Enqueue(block); 
     block[0] = 3; 
     q.Enqueue(block); 
     byte[] block1 = q.Dequeue(); 
     Console.WriteLine(block1[0]); 
     block1 = q.Dequeue(); 
     Console.WriteLine(block1[0]); 
     block1 = q.Dequeue(); 
     Console.WriteLine(block1[0]); 

Но на самом деле у меня есть все три блока с «3», но ожидается, «1» «2» «3». Любые идеи, что я делаю неправильно?

+1

Вы enqueueing тот же массив снова и снова. – juharr

ответ

3

Вам нужно создать новый массив каждый раз, в противном случае вы просто изменить тот же, и добавив несколько ссылок из него в Queue

Queue<Byte[]> q = new Queue<Byte[]>(); 
Byte[] block = new Byte[1]; 
block[0] = 1; 
q.Enqueue(block); 

// Create a new array 
block = new Byte[1]; 
block[0] = 2; 
q.Enqueue(block); 

// Create a new array 
block = new Byte[1]; 
block[0] = 3; 
q.Enqueue(block); 
byte[] block1 = q.Dequeue(); 
Console.WriteLine(block1[0]); 
block1 = q.Dequeue(); 
Console.WriteLine(block1[0]); 
block1 = q.Dequeue(); 
Console.WriteLine(block1[0]); 
Смежные вопросы