2012-04-30 11 views
6

Bu oldukça basit bir soru olmalıydı, ama kesin bir cevap bulmakta biraz zorlanıyordum.C# yerine Array.ToArray() bir DEEP kopyasını gerçekleştirir mi?

Bir değer diziniz olduğunda ve .ToArray() yöntemini kullandığınızda, dizinin derin veya sığ bir kopyasını oluşturur mu?

+0

Bunun için hızlı bir test yazmadan önce internette buna bir cevap aramaktaydım (ki bu hızlı bir şekilde googling değil). Sanırım sorudaki -1 notunun sebebi, Deep copy, Shallow copy ve object referencing (muhtemelen sığ kopya olarak adlandırdığınız) arasında yanlış anlaşılma olduğun içindir. – capn

cevap

13

No.

Bunu test etmek için küçük bir program yazarak bunu kolayca doğrulayabilirsiniz.

+0

+1. Yapı dizisi ise, değerleri kopyalayacağını unutmayın (hala sığ kopya). –

+0

Sadece 3 elementli bir string [] ile küçük bir program oluşturdum, daha sonra = origArray.ToArray() ile yeni bir dizi oluşturdum ve sonra yeni dizideki bir elemanı değiştirdim ve her iki diziyi de yazdım. Bu derin bir kopya olduğu anlamına gelmez mi? Neye bakıyorum? – hrh

+2

C# içinde derin kopya yapmak için yerleşik bir yol yoktur, bu yüzden muhtemelen "derin" tanımınız sıra dışıdır. Yeni bir soru sormayı "derin kopya nedir, işte benim anlayışım ..." diye düşünün (diğer insanların anlamanızın hangi yönünü yanlış yorumladığına veya yorum yapamayacağından nasıl anladığınızı net bir şekilde açıklamayı unutmayın) . –

İlgili konular