Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Cách hoạt động của mảng (Array) trong C#

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