Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

อาร์เรย์ทำงานใน C # อย่างไร


อาร์เรย์แสดงถึงองค์ประกอบจำนวนคงที่ของประเภทที่กำหนด องค์ประกอบจะถูกเก็บไว้ในบล็อกหน่วยความจำที่อยู่ติดกันและให้การเข้าถึงองค์ประกอบที่มีประสิทธิภาพสูงตราบใดที่คุณทราบดัชนีขององค์ประกอบ

ไวยากรณ์ C# ในการประกาศและเริ่มต้นอาร์เรย์มีดังนี้ -

// create a string array to hold 5 languages
string[] languages = new string[3];

เมื่ออาร์เรย์ได้รับการประกาศแล้ว คุณสามารถเติมข้อมูลรายการในอาร์เรย์ได้โดยใช้เครื่องหมายสี่เหลี่ยมบนอาร์เรย์

languages[0] = "csharp";
languages[1] = "visual basic";
languages[2] = "f#";

อย่างไรก็ตาม มีรูปแบบอื่นที่กระชับเพื่อรวมสองขั้นตอนข้างต้นไว้ในขั้นตอนเดียว

string[] languages = new string[] { "csharp", "visual basic", "f#" };

ด้วยตัวแปรที่พิมพ์โดยปริยายใน C# คุณสามารถกำจัดประเภททางด้านซ้ายของชื่อตัวแปรและใช้ var ได้

var languages = new string[] { "csharp", "visual basic", "f#" };

คุณสามารถเข้าถึงองค์ประกอบใดก็ได้ในอาร์เรย์โดยใช้เครื่องหมายสี่เหลี่ยมเดียวกัน

string language = languages[0];
Console.WriteLine(language); // prints csharp

คุณสมบัติ Length ในอาร์เรย์บอกเราว่ามีกี่รายการในอาร์เรย์นั้น

int count = languages.Length;
Console.WriteLine(count); // 3

สิ่งสำคัญคือต้องจำไว้ว่าคุณไม่สามารถเปลี่ยนความยาวของอาร์เรย์ได้เมื่อสร้างอาร์เรย์แล้ว การพยายามเข้าถึงองค์ประกอบที่อยู่นอกขอบเขตของอาร์เรย์ทำให้เกิดข้อยกเว้น

string lang = languages[3]; // throws System.IndexOutOfRangeException

หากคุณต้องการวนรอบอาร์เรย์ ให้ใช้ for หรือ foreach loop ที่ภาษากำหนดไว้

// 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
}

ค่าเริ่มต้น

เมื่อคุณสร้างอาร์เรย์ คอมไพเลอร์ C# จะเริ่มต้นองค์ประกอบให้เป็นค่าเริ่มต้น ตัวอย่างเช่น การสร้างอาร์เรย์ของจำนวนเต็มจะตั้งค่าของแต่ละองค์ประกอบเป็น 0

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
public struct Point { public int X, Y; }

อย่างไรก็ตาม สำหรับประเภทการอ้างอิง คอมไพเลอร์จะสร้างการอ้างอิง null สำหรับแต่ละรายการ

User[] u = new User[4];
int y = u[2].Y; // NullReference exception
public class User { public int X, Y; }

เพื่อหลีกเลี่ยงข้อผิดพลาด คุณต้องเริ่มต้นแต่ละรายการอย่างชัดเจนดังนี้

User[] users = new User[5];
for (int i = 0; i < users.Length; i++) // Iterate i from 0 to 999
users[i] = new User();

ตัวอย่าง

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; }

ผลลัพธ์

csharp
3
csharp
visual basic
f#
csharp
visual basic
f#
0
0
0
0