2013-03-31 25 views
10

Kiedyś ten kod skopiować jedną tablicę 2D do innego tablicy 2D:skopiować jedną tablicę 2D do innego tablicy 2D

Array.Copy(teamPerformance, 0,tempPerformance,0, teamPerformance.Length); 

Jednak, kiedy zmienić niektóre dane w tempPerformance czym zmiany te mają zastosowanie również do teamPerformance.
Co powinienem zrobić, żeby to kontrolować?

Odpowiedz

14

ta jest poprawna: Array.Copy wykonuje płytkie kopię, więc przypadki tablicach wewnątrz wewnętrznego wymiaru kopiowane przez odniesienie. Można użyć LINQ zrobić kopię, tak:

var copy2d = orig2d.Select(a => a.ToArray()).ToArray(); 

Oto demo on ideone.

+0

dziękuję za pomoc – user2079550

2

Według MS (http://msdn.microsoft.com/en-us/library/z50k9bft.aspx)

Jeśli macierz_źródłowa i destinationArray są obie tablice informacyjne, lub obie tablice typu obiektu, płytka kopia jest wykonywana. Płytka kopia tablicy to nowa tablica zawierająca odniesienia do tych samych elementów, co oryginalna tablica. Same elementy lub cokolwiek, do których odwołują się elementy, nie są kopiowane. Natomiast głęboka kopia tablicy kopiuje elementy i wszystko bezpośrednio lub pośrednio przywoływane przez elementy.

15

Trzeba Clone()

double[,] arr = 
{ 
    {1, 2}, 
    {3, 4} 
}; 
double[,] copy = arr.Clone() as double[,]; 
copy[0, 0] = 2; 
//it really copies the values, not a shallow copy, 
//after: 
//arr[0,0] will be 1 
//copy[0,0] will be 2 
+0

Wolę tę odpowiedź. Proponuję również, aby zadanie wyglądało tak: double [,] copy = (double [,]) arr.Clone(); – zumalifeguard