수색…


루핑 스타일

동안

가장 간단한 루프 유형입니다. 단점은 루프에서 어디에 있는지 알 수있는 본질적인 단서가 없다는 것입니다.

/// loop while the condition satisfies
while(condition)
{
    /// do something
}

해야 할 것

while 과 유사하지만 조건은 시작 대신 루프의 끝에서 평가됩니다. 이렇게하면 루프를 한 번 이상 실행하게됩니다.

do
{
    /// do something
} while(condition) /// loop while the condition satisfies

에 대한

또 다른 간단한 루프 스타일. 색인을 반복하는 동안 ( i ) 증가하고 그것을 사용할 수 있습니다. 대개 배열 처리에 사용됩니다.

for ( int i = 0; i < array.Count; i++ )
{
    var currentItem = array[i];
    /// do something with "currentItem"
}

각각

IEnumarable 객체를 통해 루핑하는 현대화 된 방법입니다. 당신이 항목의 색인이나 목록의 항목 수에 대해 생각할 필요가없는 좋은 일.

foreach ( var item in someList )
{
    /// do something with "item"
}

Foreach 메서드

다른 스타일은 컬렉션의 요소를 선택하거나 업데이트하는 데 사용되지만 일반적으로 컬렉션의 모든 요소를 ​​즉시 호출하는 데 사용됩니다.

list.ForEach(item => item.DoSomething());

// or
list.ForEach(item => DoSomething(item));

// or using a method group
list.ForEach(Console.WriteLine);

// using an array
Array.ForEach(myArray, Console.WriteLine);

이 메서드는 List<T> 인스턴스에서만 사용할 수 있고 Array 의 정적 메서드로 사용하는 것이 중요합니다.이 메서드는 Linq의 일부가 아닙니다 .

Linq Parallel Foreach

Linq Foreach와 마찬가지로,이 작업은 병렬 방식으로 수행됩니다. 컬렉션의 모든 항목이 동시에 지정된 액션을 동시에 실행한다는 것을 의미합니다.

collection.AsParallel().ForAll(item => item.DoSomething());

/// or
collection.AsParallel().ForAll(item => DoSomething(item));

단절

때때로 루프 상태가 루프의 중간에서 검사되어야합니다. 전자는 후자보다 논증 할 수있을 정도로 우아합니다.

for (;;)
{
    // precondition code that can change the value of should_end_loop expression

    if (should_end_loop)
        break;

    // do something
}

대안 :

bool endLoop = false;
for (; !endLoop;)
{
    // precondition code that can set endLoop flag

    if (!endLoop)
    {
        // do something
    }
}

참고 : 중첩 루프 및 / 또는 switch 는 단순한 break 이상의 기능을 사용해야합니다.

Foreach 루프

foreach는 IEnumerable 을 구현 한 클래스의 모든 객체를 반복합니다 ( IEnumerable<T> 객체를 상속받습니다). 이러한 개체에는 List<T> , T[] (모든 형식의 배열), Dictionary<TKey, TSource>IQueryableICollection 과 같은 인터페이스가 포함되어 있지만 일부 기본 제공 개체가 포함됩니다.

통사론

foreach(ItemType itemVariable in enumerableObject)
    statement;

비고

  1. ItemType 유형은 항목의 정확한 유형과 일치 할 필요가 없으며 항목 유형에서 할당 할 수 있어야합니다.
  2. ItemType 대신 var 대신 IEnumerable 구현의 generic 인수를 검사하여 enumerableObject의 항목 유형을 유추 할 수 있습니다
  3. 명령문은 블록, 단일 명령문 또는 빈 명령문 ( ; ) 일 수 있습니다.
  4. enumerableObjectIEnumerable 구현하지 않으면 코드가 컴파일되지 않습니다.
  5. 매 반복마다 현재 항목이 ItemType 으로 캐스팅되고 (지정되지 않았지만 var 를 통해 컴파일러에서 유추 var ) 항목을 형 변환 할 수없는 경우 InvalidCastException 이 발생합니다.

다음 예제를 고려하십시오.

var list = new List<string>();
list.Add("Ion");
list.Add("Andrei");
foreach(var name in list)
{
    Console.WriteLine("Hello " + name);
}

다음과 같습니다.

var list = new List<string>();
list.Add("Ion");
list.Add("Andrei");
IEnumerator enumerator;
try
{
    enumerator = list.GetEnumerator();
    while(enumerator.MoveNext())
    {
        string name = (string)enumerator.Current;
        Console.WriteLine("Hello " + name);
    }
}
finally
{
    if (enumerator != null)
        enumerator.Dispose();
}

While 루프

int n = 0;
while (n < 5) 
{
    Console.WriteLine(n);
    n++;
}

산출:

0
1
2

4

IEnumerator는 while 루프로 반복 될 수 있습니다.

// Call a custom method that takes a count, and returns an IEnumerator for a list
// of strings with the names of theh largest city metro areas.
IEnumerator<string> largestMetroAreas = GetLargestMetroAreas(4);

while (largestMetroAreas.MoveNext())
{
    Console.WriteLine(largestMetroAreas.Current);
}

샘플 출력 :

도쿄 / 요코하마
뉴욕 메트로
상파울루
서울 / 인천

For Loop

For 루프는 일정 시간 동안 일을하는 데 적합합니다. While 루프와 같지만 증분은 조건에 포함됩니다.

For 루프는 다음과 같이 설정됩니다.

for (Initialization; Condition; Increment)
{
    // Code
}

초기화 - 루프에서만 사용할 수있는 새 로컬 변수를 만듭니다.
조건 - 조건이 참일 때만 루프가 실행됩니다.
Increment - 루프가 실행될 때마다 변수가 변경되는 방식입니다.

예 :

for (int i = 0; i < 5; i++)
{
    Console.WriteLine(i);
}

산출:

0
1
2

4

또한 For Loop에 공백을 둘 수는 있지만 함수가 작동하려면 모든 세미콜론이 있어야합니다.

int input = Console.ReadLine();    

for ( ; input < 10; input + 2)
{
    Console.WriteLine(input);
}

3에 대한 출력 :


5
7
9
11

Do - While 루프

while 루프와 비슷하지만 루프 본문의 에서 조건을 테스트한다는 점만 다릅니다. Do - While 루프는 조건이 true인지 여부와 관계없이 루프를 한 번 실행합니다.

int[] numbers = new int[] { 6, 7, 8, 10 };
    
// Sum values from the array until we get a total that's greater than 10,
// or until we run out of values.
int sum = 0;
int i = 0;
do
{
    sum += numbers[i];
    i++;
} while (sum <= 10 && i < numbers.Length);
    
System.Console.WriteLine(sum); // 13

중첩 루프

// Print the multiplication table up to 5s
for (int i = 1; i <= 5; i++)
{
    for (int j = 1; j <= 5; j++)
    {
        int product = i * j;
        Console.WriteLine("{0} times {1} is {2}", i, j, product);
    }
}

잇다

break 이외에 키워드 continue 있습니다. 루프를 완전히 중단하는 대신 현재 반복을 건너 뜁니다. 특정 값이 설정된 경우 일부 코드를 실행하지 않으려면 유용 할 수 있습니다.

다음은 간단한 예입니다.

for (int i = 1; i <= 10; i++)
{
    if (i < 9)
        continue;

    Console.WriteLine(i);
}

결과는 다음과 같습니다.

9
10

참고 : Continue 는 종종 while 또는 do-while 루프에서 가장 유용합니다. 잘 정의 된 종료 조건을 가진 for 루프는 그다지 이점을 얻지 못할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow