Mảng (array) đại diện cho số lượng cố định các phần tử cùng kiểu. Các phần tử lưu trong khối bộ nhớ liên tục, truy xuất cực hiệu quả nếu biết chỉ số (index).
Khai báo và khởi tạo
// Tạo mảng string 3 phần tử
string[] languages = new string[3];
Gán giá trị qua chỉ số:
languages[0] = "csharp";
languages[1] = "visual basic";
languages[2] = "f#";
Cú pháp ngắn gọn kết hợp khai báo + khởi tạo:
string[] languages = new string[] { "csharp", "visual basic", "f#" };
Dùng var (implicitly typed):
var languages = new string[] { "csharp", "visual basic", "f#" };
Truy xuất phần tử
string language = languages[0];
Console.WriteLine(language); // csharp
Thuộc tính Length
int count = languages.Length; // 3
Console.WriteLine(count);
Lưu ý: Không thể thay đổi độ dài mảng sau khi tạo. Truy xuất ngoài phạm vi ném IndexOutOfRangeException.
Duyệt mảng
// for loop
for (int i = 0; i < languages.Length; i++)
{
Console.WriteLine(languages[i]);
}
// foreach loop
foreach (string l in languages)
{
Console.WriteLine(l);
}
Giá trị mặc định
Khi tạo mảng, C# khởi tạo phần tử về giá trị mặc định:
- Kiểu giá trị (int, struct...): 0 hoặc các thành viên = 0
- Kiểu tham chiếu (class, array...): null
// int array → 0, 0, 0
var numbers = new int[3];
foreach (int num in numbers) Console.WriteLine(num);
// struct Point { int X, Y; } → X=0, Y=0
Point[] a = new Point[4];
Console.WriteLine(a[2].X); // 0
// class User { int X, Y; } → null reference
User[] u = new User[4];
// u[2].Y ném NullReferenceException
// Phải khởi tạo từng phần tử:
User[] users = new User[5];
for (int i = 0; i < users.Length; i++) users[i] = new User();
Ví dụ hoàn chỉnh
using System;
class Program
{
static void Main()
{
string[] languages = new string[3];
languages[0] = "csharp";
languages[1] = "visual basic";
languages[2] = "f#";
var lang2 = new string[] { "csharp", "visual basic", "f#" };
var lang3 = new string[] { "csharp", "visual basic", "f#" };
Console.WriteLine(languages[0]); // csharp
Console.WriteLine(languages.Length); // 3
for (int i = 0; i < languages.Length; i++)
Console.WriteLine(languages[i]);
foreach (string l in languages)
Console.WriteLine(l);
var numbers = new int[3];
foreach (int num in numbers) Console.WriteLine(num); // 0 0 0
Point[] a = new Point[4];
Console.WriteLine(a[2].X); // 0
User[] users = new User[5];
for (int i = 0; i < users.Length; i++) users[i] = new User();
}
}
public struct Point { public int X, Y; }
public class User { public int X, Y; }
Kết quả đầu ra
csharp
3
csharp
visual basic
f#
csharp
visual basic
f#
0
0
0
0