[C#] 조건문과 반복문

[원본 링크]

이번에는 제어문에 대해서 대충 정리하고 지나가겠다.

if와 else, for, while, do while, ?:(삼함) 같은건 자바나 C++과 완전히 동일하다.

if(조건식) 문장;
if(조건식) { ... }
...생략


그리고 범위기반 루프로 foreach가 존재한다.

foreach(요소타입 요소변수 in 요소덩어리)
{ ... }
저 덩어리의 모든 요소들을 순차적으로 접근하는 것이다.

저 덩어리에 들어가기 위해서는 특수한 인터페이스를 구현해야만 한다. IEnumable을 인터페이스를 구현해서 IEnumeator를 반환하는 메서드를 집어넣고 거기서 반환할 커스텀 IEnumerator를 짜서 넣어야 하고... 더럽게 복잡한데 나중에 yield 키워드랑 같이 정리해보겠다.


그리고 점프문으로는
continue와 break, goto가 존재한다.
안타깝게도 C#에는 브레이크 레이블이 존재하지 않아서 다중반복문에서 즉시 탈출하려면 goto를 써야한다.


그리고 재미있는 null관련 조건문이 두어개 있다.

A ?? B
A가 null이 아니면 A 반환
A가 null이면 B 반환

객체?.멤버
객체가 null이 아니면 멤버 정상 접근
null이면 null 반환
C# 6.0부터 생김

객체?[]
위의 변형
인덱서란 것만 다름


Switch
Switch 구문도 원래 C++이나 자바와 같...았지만 버전 7.0부터 패턴매칭 기능이 확장되었다.
일단 그 이전의 형태를 보자면
switch(전달값)
{
case 상수값: ... break;
case 상수값N: ... break;
default:...
}
이렇다.
break.는 문법적으로 필수사항인데 예외적으로 내용이 없으면 이어붙일 수 있다. 이렇게

case 3 :
case 4. :
... break;

원래는 저기에 상수 '값'만 됐다. 그런데 패턴매칭 기능이 들어가고 나서는 '값'뿐만이 아니라 '타입'을 집어넣을 수도 있다.
이렇게 말이다.

case string str : ... break;  //타입이 string이면 str에 값을 바인딩하고 수행한다는 뜻. 변수는 생략가능
case int : ... break; //int면 수행

그리고 when으로 추가조건을 부여할 수 있다.

이렇게



그리고 Switch 전달값에는 원래 제네릭 값이 못들어갔는데 버전 7.1부터는 허용된다.