आपको निश्चित रूप से परिवर्तनशील संरचनाओं के अपने संग्रह का प्रबंधन करने के लिए सरणियों की आवश्यकता है , और हम उन लोगों के बिना क्या करेंगे।
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
(ध्यान दें कि कुछ ऐसे मामले भी हो सकते हैं, जहां उत्परिवर्तित संरचना का एक सरणी वांछनीय है, लेकिन आमतौर पर सरणियों के भीतर उत्परिवर्तनीय संरचनाओं का यह भिन्न व्यवहार बनाम अन्य संग्रह त्रुटियों का एक स्रोत है जिसे टाला जाना चाहिए)
अधिक गंभीरता से, आपको एक सरणी की आवश्यकता है यदि आप संदर्भ द्वारा एक तत्व पास करना चाहते हैं । अर्थात
Interlocked.Increment(ref myArray[i]); // works
Interlocked.Increment(ref myList[i]); // does not work, you can't pass a property by reference
यह लॉक-फ्री थ्रेडसेफ़ कोड के लिए उपयोगी हो सकता है।
आपको एक सरणी की आवश्यकता है यदि आप जल्दी और कुशलता से डिफ़ॉल्ट मूल्य के साथ अपने निश्चित आकार के संग्रह को शुरू करना चाहते हैं ।
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
(ध्यान दें कि सूची के लिए एक कंस्ट्रक्टर को लागू करना संभव होगा जो ऐसा करता है, यह सिर्फ इतना है कि c # इस सुविधा की पेशकश नहीं करता है)
यदि आप कुशलतापूर्वक संग्रह के कुछ हिस्सों को कॉपी करना चाहते हैं, तो आपको एक सरणी की आवश्यकता है
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
(फिर से, यह कुछ ऐसा है जिसे सूची के लिए भी लागू किया जा सकता है, लेकिन यह सुविधा c # में मौजूद नहीं है)
List<T>