2009-11-27 52 views
7

Tengo una matriz de entradas. Comienzan con 0, luego se llenan con algunos valores. Luego quiero volver a poner todos los valores en 0 para que pueda volver a usarlos, o simplemente eliminar toda la matriz para poder redeclararla y comenzar con una matriz de todos los 0.Cómo borrar una matriz en Visual C#

+0

posible duplicado de http://stackoverflow.com/questions/1407715/how -to-quickly-zero-out-an-array –

Respuesta

28

Puede llamar Array.Clear:

int[] x = new int[10]; 
for (int i = 0; i < 10; i++) 
{ 
    x[i] = 5; 
} 
Array.Clear(x, 0, x.Length); 

Alternativamente, dependiendo de la situación, puede que le resulte más claro para simplemente crear una nueva matriz en su lugar. En particular, entonces no necesita preocuparse acerca de si algún otro código todavía tiene una referencia a la matriz y espera que los valores antiguos estén allí.

No recuerdo haber llamado al Array.Clear en mi propio código, simplemente no es algo que haya necesitado.

(Por supuesto, si usted está a punto de sustituir todos los valores de todos modos, se puede hacer eso sin quitar primero la matriz.)

+2

Cualquier matriz también implementa la *** interfaz no genérica *** 'IList' que tiene un método' Clear'. Diciendo '((IList) x) .Clear();' también "borra" la instancia de la matriz, aunque esto no está bien [documentado] (http://msdn.microsoft.com/en-us/library/bb340970.aspx) Si la matriz es en realidad unidimensional e indexada en cero, también "mágicamente" implementa la interfaz genérica 'IList <>' que tiene * otro * método también llamado 'Clear'. Si dices '((IList ) x) .Clear();' ¡obtienes una excepción de tiempo de ejecución! Es una sutileza que estas dos implementaciones explícitas de interfaz en 'Array' se comporten de manera diferente. –

+0

¡Gracias por el comentario sobre algún código que hace referencia a la matriz! Hacer s1 = s2; y Array.Clear (s2, 0, s2.Length), me tomó tiempo antes de darme cuenta de lo que hice. ¡Gracias! – Gyfis