อาร์เรย์แสดงถึงองค์ประกอบจำนวนคงที่ของประเภทที่กำหนด องค์ประกอบจะถูกเก็บไว้ในบล็อกหน่วยความจำที่อยู่ติดกันและให้การเข้าถึงองค์ประกอบที่มีประสิทธิภาพสูงตราบใดที่คุณทราบดัชนีขององค์ประกอบ
ไวยากรณ์ C# ในการประกาศและเริ่มต้นอาร์เรย์มีดังนี้ -
// create a string array to hold 5 languages string[] languages = new string[3];
เมื่ออาร์เรย์ได้รับการประกาศแล้ว คุณสามารถเติมข้อมูลรายการในอาร์เรย์ได้โดยใช้เครื่องหมายสี่เหลี่ยมบนอาร์เรย์
languages[0] = "csharp"; languages[1] = "visual basic"; languages[2] = "f#";
อย่างไรก็ตาม มีรูปแบบอื่นที่กระชับเพื่อรวมสองขั้นตอนข้างต้นไว้ในขั้นตอนเดียว
string[] languages = new string[] { "csharp", "visual basic", "f#" };
ด้วยตัวแปรที่พิมพ์โดยปริยายใน C# คุณสามารถกำจัดประเภททางด้านซ้ายของชื่อตัวแปรและใช้ var ได้
var languages = new string[] { "csharp", "visual basic", "f#" };
คุณสามารถเข้าถึงองค์ประกอบใดก็ได้ในอาร์เรย์โดยใช้เครื่องหมายสี่เหลี่ยมเดียวกัน
string language = languages[0]; Console.WriteLine(language); // prints csharp
คุณสมบัติ Length ในอาร์เรย์บอกเราว่ามีกี่รายการในอาร์เรย์นั้น
int count = languages.Length; Console.WriteLine(count); // 3
สิ่งสำคัญคือต้องจำไว้ว่าคุณไม่สามารถเปลี่ยนความยาวของอาร์เรย์ได้เมื่อสร้างอาร์เรย์แล้ว การพยายามเข้าถึงองค์ประกอบที่อยู่นอกขอบเขตของอาร์เรย์ทำให้เกิดข้อยกเว้น
string lang = languages[3]; // throws System.IndexOutOfRangeException
หากคุณต้องการวนรอบอาร์เรย์ ให้ใช้ for หรือ foreach loop ที่ภาษากำหนดไว้
// for loop for (int i = 0; i < languages.Length; i++){ string l = languages[i]; Console.WriteLine(l); // prints the names of languages in sequence } // foreach loop foreach (string l in languages){ Console.WriteLine(l); // prints the names of languages in sequence }
ค่าเริ่มต้น
เมื่อคุณสร้างอาร์เรย์ คอมไพเลอร์ C# จะเริ่มต้นองค์ประกอบให้เป็นค่าเริ่มต้น ตัวอย่างเช่น การสร้างอาร์เรย์ของจำนวนเต็มจะตั้งค่าของแต่ละองค์ประกอบเป็น 0
var numbers = new int[3]; foreach (int num in numbers){ Console.WriteLine(num); // prints 000 }
เมื่อองค์ประกอบอยู่ในประเภทค่า สมาชิกของประเภทแต่ละคนจะได้รับการกำหนดค่าเริ่มต้น
Point[] a = new Point[4]; int x = a[2].X; Console.WriteLine(x); // prints 0 public struct Point { public int X, Y; }
อย่างไรก็ตาม สำหรับประเภทการอ้างอิง คอมไพเลอร์จะสร้างการอ้างอิง null สำหรับแต่ละรายการ
User[] u = new User[4]; int y = u[2].Y; // NullReference exception public class User { public int X, Y; }
เพื่อหลีกเลี่ยงข้อผิดพลาด คุณต้องเริ่มต้นแต่ละรายการอย่างชัดเจนดังนี้
User[] users = new User[5]; for (int i = 0; i < users.Length; i++) // Iterate i from 0 to 999 users[i] = new User();
ตัวอย่าง
using System; class Program{ static void Main(){ string[] languages = new string[3]; // create a string array to hold 5 languages languages[0] = "csharp"; languages[1] = "visual basic"; languages[2] = "f#"; string[] langugages_two = new string[] { "csharp", "visual basic", "f#" }; var languages_three = new string[] { "csharp", "visual basic", "f#" }; string language = languages[0]; Console.WriteLine(language); // prints csharp int count = languages.Length; // 3 Console.WriteLine(count); //string lang = languages[3]; // throws System.IndexOutOfRangeException // for loop for (int i = 0; i < languages.Length; i++){ string l = languages[i]; Console.WriteLine(l); // prints the names of languages in sequence } // foreach loop foreach (string l in languages){ Console.WriteLine(l); // prints the names of languages in sequence } var numbers = new int[3]; foreach (int num in numbers){ Console.WriteLine(num); // prints 000 } Point[] a = new Point[4]; int x = a[2].X; Console.WriteLine(x); // prints 0 User[] u = new User[4]; //int y = u[2].Y; // NullReference exception User[] users = new User[5]; for (int i = 0; i <users.Length; i++) // Iterate i from 0 to 999 users[i] = new User(); } } public struct Point { public int X, Y; } public class User { public int X, Y; }
ผลลัพธ์
csharp 3 csharp visual basic f# csharp visual basic f# 0 0 0 0