수색…
루핑 스타일
동안
가장 간단한 루프 유형입니다. 단점은 루프에서 어디에 있는지 알 수있는 본질적인 단서가 없다는 것입니다.
/// 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>
및 IQueryable
및 ICollection
과 같은 인터페이스가 포함되어 있지만 일부 기본 제공 개체가 포함됩니다.
통사론
foreach(ItemType itemVariable in enumerableObject)
statement;
비고
-
ItemType
유형은 항목의 정확한 유형과 일치 할 필요가 없으며 항목 유형에서 할당 할 수 있어야합니다. -
ItemType
대신var
대신IEnumerable
구현의 generic 인수를 검사하여 enumerableObject의 항목 유형을 유추 할 수 있습니다 - 명령문은 블록, 단일 명령문 또는 빈 명령문 (
;
) 일 수 있습니다. -
enumerableObject
가IEnumerable
구현하지 않으면 코드가 컴파일되지 않습니다. - 매 반복마다 현재 항목이
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 루프는 그다지 이점을 얻지 못할 수 있습니다.