Anda perlu array untuk mengelola koleksi struct yang bisa berubah , tentu saja, dan apa yang akan kami lakukan tanpa itu.
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
(perhatikan bahwa mungkin ada beberapa kasus di mana array struct yang dapat diubah diinginkan, tetapi biasanya perilaku yang berbeda dari struct yang bisa berubah dalam array versus koleksi lainnya adalah sumber kesalahan yang harus dihindari)
Lebih serius, Anda memerlukan sebuah array jika Anda ingin melewatkan elemen dengan referensi . yaitu
Interlocked.Increment(ref myArray[i]); // works
Interlocked.Increment(ref myList[i]); // does not work, you can't pass a property by reference
Itu bisa berguna untuk kode threadsafe bebas kunci.
Anda memerlukan array jika Anda ingin menginisialisasi koleksi ukuran tetap dengan cepat dan efisien dengan nilai default .
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
(perhatikan bahwa mungkin untuk mengimplementasikan konstruktor untuk Daftar yang melakukan hal yang sama, hanya saja c # tidak menawarkan fitur ini)
Anda memerlukan sebuah array jika Anda ingin menyalin bagian koleksi secara efisien
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
(sekali lagi, ini adalah sesuatu yang bisa diterapkan untuk Daftar juga, tetapi fitur ini tidak ada di c #)
List<T>