May 20 2009

Copiando Arrays no C#

falcao

Trabalhando em um programa para cálculo de métodos numéricos, deparei-me com um problema interessante. O código tem dois Arrays, vetorInicial e vetorCopiado. O vetorInicial já tinha valores, e eu precisava copiar para o vetorCopiado, que estava sendo criado naquele momento. Naturalmente, fiz o seguinte:


Double [] vetorCopiado = vetorInicial;

Grande foi a minha surpresa ao saber que ao modificar o vetorInicial depois da cópia também alteraria os valor de vetorCopiado. Depois de algum tempo de pesquisas, encontrei a solução:


Double [] vetorCopiado = new Double[vetorInicial.GetLenght(0)];

Array.Copy(vetorInicial, vetorCopiado, 0);

O método Copy da classe Array copia os valores ao invés da referência, como mostrado no primeiro código. Esse método tem overloads que podem ajudar em casos específicos, então vale a pena conferir.

Ps: Também é possível copiar matrizes ( Type[,] ), basta passar como parâmetro de quantidade de itens a ser copiados o número de elementos da matriz (m*n).