배열은 주어진 유형의 고정된 수의 요소를 나타냅니다. 요소는 연속적인 메모리 블록에 저장되며 요소의 인덱스를 알고 있는 한 요소에 매우 효율적으로 액세스할 수 있습니다.
배열을 선언하고 초기화하는 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 루프를 사용하세요.
// 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