2011-05-16 28 views

Respuesta

48

¿Por qué nadie parece saber Array.Resize:

Array.Resize(ref myArray, 1024); 

simple como el pastel.

PS: según un comentario en MSDN, aparentemente esto faltaba en la documentación de MSDN en 3.0; esto podría explicar su popular ignición

+1

MSDN Link http://msdn.microsoft.com/en-us/library/bb348051.aspx –

+0

@Brian: gracias, he copiado el enlace incorrecto en la respuesta, sry – sehe

+6

Tenga en cuenta que esto crea una nueva matriz, si tener una referencia a la matriz anterior en alguna parte, esa matriz no se actualizará. –

3

Si tiene que aumentarlo, ¿por qué no empezar con un List<byte> en primer lugar?

7

Usted puede asignar una nueva matriz y copiar los bytes de nuevo con Array.Copy(..)

byte[] oldArr = new byte[1024]; 
byte[] newArr = new byte[oldArr.Length * 2]; 

System.Array.Copy(oldArr, newArr, oldArr.Length); 

oldArr = newArr; 
+0

¿Qué es 'temp'? – jams

+0

@jams: una temperatura es lo que no necesita [cuando se usa 'Array.Resize'] (http://stackoverflow.com/questions/6017039/how-to-increase-byte-size-at-run-time/6017109 # 6017109) (sonrisa) – sehe

+0

¿Qué es 'temp' en su código? – jams

12

Usted no puede: matrices se fijan tamaño.

O bien utilizar una colección re-considerable (por ejemplo. List<byte>) o crear una nueva matriz más grande y copiar el contenido de la matriz original sobre.


Incluso Array.Resize no modifica el objeto matriz pasada: se crea una nueva matriz y copia los elementos. Simplemente te ahorra codificación esto tu mismo. La diferencia es importante: otras referencias a la matriz anterior seguirán viendo la matriz anterior.

2

Una matriz es de tamaño fijo y no se puede cambiar dinámicamente en tiempo de ejecución.

Su única opción es crear una nueva matriz del tamaño deseado y copiar todos los bytes de la matriz anterior a la nueva.

¿Pero por qué torturarte con esto en vez de usar List<byte> y simplemente agregar o eliminar elementos a voluntad?

Cuestiones relacionadas