อาร์เรย์ (Array) แทนจำนวนคงที่ขององค์ประกอบชนิดเดียวกัน จัดเก็บในหน่วยความจำติดกัน (Contiguous Memory) ให้การเข้าถึงได้อย่างมีประสิทธิภาพหากรู้ Index
Syntax การประกาศและเริ่มต้น:
// สร้างอาร์เรย์สตริงขนาด 3 string[] languages = new string[3];
กำหนดค่าให้แต่ละ Index:
languages[0] = "csharp"; languages[1] = "visual basic"; languages[2] = "f#";
Syntax แบบสั้น (Collection Initializer):
string[] languages = new string[] { "csharp", "visual basic", "f#" };ใช้ var (Implicitly Typed):
var languages = new string[] { "csharp", "visual basic", "f#" };เข้าถึงองค์ประกอบ:
string language = languages[0]; Console.WriteLine(language); // csharp
Property Length บอกจำนวนองค์ประกอบ:
int count = languages.Length; // 3
สำคัญ: ไม่สามารถเปลี่ยนขนาดอาร์เรย์หลังสร้างแล้ว การเข้าถึง Index นอกขอบเขตจะโยน IndexOutOfRangeException
string lang = languages[3]; // throws Exception
วนลูปอาร์เรย์ด้วย for หรือ foreach:
// for loop
for (int i = 0; i < languages.Length; i++)
{
Console.WriteLine(languages[i]);
}
// foreach loop
foreach (string l in languages)
{
Console.WriteLine(l);
}Default Values
ตอนสร้างอาร์เรย์ Compiler เริ่มต้นค่า Default ให้ เช่น int[] ทุกตัวเป็น 0
var numbers = new int[3]; foreach (int n in numbers) Console.WriteLine(n); // 0 0 0
Value Type (Struct): สมาชิกทุกตัวเป็น Default Value
Point[] a = new Point[4];
Console.WriteLine(a[2].X); // 0
struct Point { public int X, Y; }Reference Type (Class): สร้าง Null Reference ให้ทุกตัว
User[] u = new User[4];
// u[2].Y โยน NullReferenceException
class User { public int X, Y; }ต้อง Initialize เอง:
User[] users = new User[5]; for (int i = 0; i < users.Length; i++) users[i] = new User();
ตัวอย่างโค้ดครบ
using System;
class Program
{
static void Main()
{
string[] languages = new string[3];
languages[0] = "csharp";
languages[1] = "visual basic";
languages[2] = "f#";
string[] languages2 = new string[] { "csharp", "visual basic", "f#" };
var languages3 = new string[] { "csharp", "visual basic", "f#" };
Console.WriteLine(languages[0]); // csharp
Console.WriteLine(languages.Length); // 3
foreach (string l in languages) Console.WriteLine(l);
var numbers = new int[3];
foreach (int n in numbers) Console.WriteLine(n); // 0 0 0
Point[] pts = new Point[4];
Console.WriteLine(pts[2].X); // 0
User[] users = new User[5];
for (int i = 0; i < users.Length; i++) users[i] = new User();
}
}
struct Point { public int X, Y; }
class User { public int X, Y; }ผลลัพธ์
csharp 3 csharp visual basic f# csharp visual basic f# 0 0 0 0