Một mảng đại diện cho một số phần tử cố định của một kiểu nhất định. Các phần tử được lưu trữ trong một khối bộ nhớ liền kề và cung cấp quyền truy cập hiệu quả cao vào các phần tử miễn là bạn biết chỉ mục của một phần tử.
Cú pháp C # để khai báo và khởi tạo một mảng như sau -
// create a string array to hold 5 languages string[] languages = new string[3];
Khi mảng được khai báo, bạn có thể điền các mục trong mảng bằng cách sử dụng ký hiệu hình vuông trên mảng.
languages[0] = "csharp"; languages[1] = "visual basic"; languages[2] = "f#";
Tuy nhiên, có một cú pháp ngắn gọn, thay thế để kết hợp hai bước trên trong một bước duy nhất.
string[] languages = new string[] { "csharp", "visual basic", "f#" };
Với các biến được nhập ngầm trong C #, bạn có thể loại bỏ kiểu ở phía bên trái của tên biến và chỉ cần sử dụng var.
var languages = new string[] { "csharp", "visual basic", "f#" };
Bạn có thể truy cập bất kỳ phần tử nào trong mảng bằng cách sử dụng cùng một ký hiệu hình vuông.
string language = languages[0]; Console.WriteLine(language); // prints csharp
Thuộc tính Length trên một mảng cho chúng ta biết có bao nhiêu mục trong mảng đó.
int count = languages.Length; Console.WriteLine(count); // 3
Điều quan trọng cần nhớ là bạn không thể thay đổi độ dài của một mảng sau khi nó được tạo. Việc cố gắng truy cập vào một phần tử bên ngoài giới hạn của một mảng sẽ tạo ra một ngoại lệ.
string lang = languages[3]; // throws System.IndexOutOfRangeException
Nếu bạn muốn lặp lại một mảng, hãy sử dụng vòng lặp for hoặc foreach do ngôn ngữ cung cấp.
// 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 }
Giá trị mặc định
Khi bạn tạo một mảng, trình biên dịch C # sẽ khởi tạo các phần tử thành giá trị mặc định của chúng. Ví dụ:tạo một mảng các số nguyên đặt giá trị của mỗi phần tử là 0.
var numbers = new int[3]; foreach (int num in numbers){ Console.WriteLine(num); // prints 000 }
Khi phần tử thuộc về một kiểu giá trị, mỗi thành viên của kiểu được gán cho giá trị mặc định của nó.
Point[] a = new Point[4]; int x = a[2].X; Console.WriteLine(x); // prints 0 public struct Point { public int X, Y; }
Tuy nhiên, đối với các loại tham chiếu, trình biên dịch chỉ cần tạo tham chiếu rỗng cho mỗi mục.
User[] u = new User[4]; int y = u[2].Y; // NullReference exception public class User { public int X, Y; }
Để tránh lỗi, bạn phải khởi tạo từng mục một cách rõ ràng, như sau.
User[] users = new User[5]; for (int i = 0; i < users.Length; i++) // Iterate i from 0 to 999 users[i] = new User();
Ví dụ
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; }
Đầu ra
csharp 3 csharp visual basic f# csharp visual basic f# 0 0 0 0