C#
반복문 : for, foreach, do 및 while
_dev_mu
2023. 1. 9. 22:24
Iteration statement : 반복문
반복문은 코드블록을 반복적으로 실행합니다.
for 문 : 지적된 bool 식이 true로 계산되는 동안 본문을 실행합니다.
foreach 문 : 컬렉션의 요소를 열거하고 컬렉션의 각 요소에 대한 본문을 실행합니다.
do 문 : 조건에 따라 본문을 한 번 이상 실행합니다.
while 문 : 조건에 따라 본문을 0번 이상 실행합니다
반복문은 본문 내의 모든 지점에서 break문을 사용하여 루프를 중단할 수 있습니다.
continue문을 사용하여 루프에서 다음 반복으로 단계별로 실행할 수 있습니다.
for 문
for문은 지정된 bool식이 true로 계산되는 동안 문 또는 코드블록을 실행합니다.
for (int i = 0; i < 3; i++)
{
Console.Write(i);
}
// Output:
// 012
루프로 유입되기 전에 한 번만 실행되는 initializer 입니다.
일반적으로 해당 섹션이서 로컬 로프 변수를 선언하고 초기화합니다.
선언된 변수는 for문 외부에서 엑세스할 수 없습니다.
정수 카운터 변수를 선언하고 초기화 합니다.
int i = 0
루프의 다음 반복을 실행할지 여부를 결정하는 condition 입니다. true로 평가되거나 없는 경우 다음 반복이 실행되고, 그렇지 않으면 루프가 종료됩니다.
condition 섹션은 bool 식이어야 합니다.
condition은 카운터 값이 3보다 작은지 확인합니다.
i < 3
루프의 본문을 실행할 때마다 수행되는 작업을 정의하는 iterator 입니다.
iterator는 카운터를 증가시킵니다.
i++
int i;
int j = 3;
for (i = 0, Console.WriteLine($"Start: i={i}, j={j}"); i < j; i++, j--, Console.WriteLine($"Step: i={i}, j={j}"))
{
//...
}
// Output:
// Start: i=0, j=3
// Step: i=1, j=2
// Step: i=2, j=1
다음 코드는 무한 for 루프를 정의합니다.
for ( ; ; )
{
//...
}
foreach 문
foreach문은 다음 예쩨와 같이 System.Collections.IEnumerable 또는 System.Collections.Generic.IEnumerable<T> 인터페이스를 구현하는 형식의 인스턴스에 있는 각 요소에 대해 문 또는 코드 블록을 실행시킵니다.
var fibNumbers = new List<int> { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibNumbers)
{
Console.Write($"{element} ");
}
// Output:
// 0 1 1 2 3 5 8 13
형식에 public 매개 변수가 없는 GetEnumerator 메서드가 있습니다.
C# 9.0부터는 GetEnumerator 메서드가 형식의 확장 메서드일 수 있습니다.
GetEnumerator 메서드의 반환형식이 public Current 속성과 반환 형식이 bool인 public 매개 변수가 없는 MoveNext를 포함합니다.
다음 예제는 인터페이스를 구현하지 않는 System.Span<T> 형식의 인스턴스와 함께 foreach문을 사용합니다.
Span<int> numbers = new int[] { 3, 14, 15, 92, 6 };
foreach (int number in numbers)
{
Console.Write($"{number} ");
}
// Output:
// 3 14 15 92 6
열거자 Current 속성이 참조 반환값(ret T 여기서 T은 컬렉션 요소의 형식)을 반환하는 경우 다음 예제와 같이 ref readonly 한정자를 사용하여 ref 반복 변수를 선언할 수 있습니다.
Span<int> storage = stackalloc int[10];
int num = 0;
foreach (ref int item in storage)
{
item = num++;
}
foreach (ref readonly var item in storage)
{
Console.Write($"{item} ");
}
// Output:
// 0 1 2 3 4 5 6 7 8 9
foreach 문이 null에 적용되면 NullReferenceException이 throw 됩니다.
foreach 문의 소스 컬렉션이 비어 있으면 foreach 문의 본문이 실행되지 않고 건너뜁니다.
do 문
do 문은 지정된 bool 식이 true로 계산되는 동안 문 또는 코드 블럭을 실행합니다. 이 식은 각 루프 실행후 평가되기 때문에 do루프가 한번 이상 실행됩니다.
do문은 0회 이상 실행되는 while 루프와 다릅니다.
int n = 0;
do
{
Console.Write(n);
n++;
} while (n < 5);
// Output:
// 01234
while 문
while문은 지정된 bool 식이 true로 계산되는 동안 문 또는 코드 블록을 실행합니다.
이 식은 각 루프를 실행하기 전에 평가되기 때문에 while 루프는 0번 이상 실행됩니다.
while 문은 0번 이상 실행됩니다.
while 문은 한 번 이상 실행되는 do 루프와 다릅니다.