Elbette değişken yapılar koleksiyonunuzu yönetmek için dizilere ihtiyacınız var ve bunlar olmadan ne yapardık?
struct EvilMutableStruct { public double X; } // don't do this
EvilMutableStruct[] myArray = new EvilMutableStruct[1];
myArray[0] = new EvilMutableStruct()
myArray[0].X = 1; // works, this modifies the original struct
List<EvilMutableStruct> myList = new List<EvilMutableStruct>();
myList.Add(new EvilMutableStruct());
myList[0].X = 1; // does not work, the List will return a *copy* of the struct
(Bir dizi değişken yapının arzu edilebildiği bazı durumlar olabileceğine dikkat edin, ancak genellikle dizilerdeki diğer değişkenlere karşı değişken yapıların bu farklı davranışı kaçınılması gereken bir hata kaynağıdır.
Daha ciddi olarak, bir öğeyi referans olarak iletmek istiyorsanız bir diziye ihtiyacınız vardır . yani
Interlocked.Increment(ref myArray[i]); // works
Interlocked.Increment(ref myList[i]); // does not work, you can't pass a property by reference
Kilitli olmayan güvenli güvenlik kodu için faydalı olabilir.
Sabit boyutlu koleksiyonunuzu varsayılan değerle hızlı ve verimli bir şekilde başlatmak istiyorsanız, bir diziye ihtiyacınız vardır .
double[] myArray = new double[1000]; // contains 1000 '0' values
// without further initialisation
List<double> myList = new List<double>(1000) // internally contains 1000 '0' values,
// since List uses an array as backing storage,
// but you cannot access those
for (int i =0; i<1000; i++) myList.Add(0); // slow and inelegant
(Liste için aynı şeyi yapan bir kurucu uygulamanın mümkün olacağına dikkat edin, c # bu özelliği sunmaz)
Koleksiyonun bölümlerini etkin bir şekilde kopyalamak istiyorsanız bir diziye ihtiyacınız var.
Array.Copy(array1, index1, array2, index2, length) // can't get any faster than this
double[,] array2d = new double[10,100];
double[] arraySerialized = new double[10*100];
Array.Copy(array2d, 0, arraySerialized, 0, arraySerialized.Length);
// even works for different dimensions
(yine, bu Liste için de uygulanabilecek bir şeydir, ancak bu özellik c # da mevcut değildir)
List<T>