Computer >> Máy Tính >  >> Lập trình >> C#

Mảng hoạt động như thế nào trong C #?

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