Switch expression
Peponi │ 1/7/2025 │ 3m
C#
SyntaxExpressionswitch
Switch expression
1/7/2025
3m
Peponi
C#
SyntaxExpressionswitch
1. Introduction
switch
식은 패턴 매칭을 기반으로 식을 계산한다. (switch
문은 Switch statement을 참조한다)
switch
식은 다음과 같이 구성한다.
x switch
{
condition1 => value1,
condition2 => value2
};
- x : 입력 값
- 스위치 암 (arm) :
,
로 구분 된 각각의 식- condition : 조건 (패턴 또는 케이스 가드)
- value : 반환 식
switch
식의 결과는 조건이 true
로 반환되는 첫번째 arm 반환 식의 값이다. (상위 arm으로 인해 하위 arm의 값 출력이 불가한 경우 컴파일러에서 오류가 발생한다) switch
식에 사용 가능한 패턴은 아래 목록을 참조한다.
- Type, declaration patterns
- Constant pattern
- Relational patterns
- Logical patterns
- Property, positional patterns
- Discard, var patterns
- List pattern
2. Example
int foo = 1;
string bar = foo switch
{
0 => "Zero",
1 => "One",
2 => "Two"
};
Console.WriteLine(bar);
/* output:
One
*/
3. 불완전 switch 식
.NET 런타임은 switch
식의 패턴과 입력 값이 일치하지 않는 경우 System.Runtime.CompilerServices.SwitchExpressionException 예외를 출력하며 입력 가능한 모든 값을 처리하지 않는 switch
식이 선언되는 경우 컴파일러는 CS8509
를 생성한다.
위의 예시 코드 또한 마찬가지의 경우로, 아래와 같이 무시 패턴 (_
)을 이용하여 모든 입력 값을 처리하도록 할 수 있다.
int foo = 10;
string bar = foo switch
{
0 => "Zero",
1 => "One",
2 => "Two",
_ => "Don't know"
};
Console.WriteLine(bar);
/* output:
Don't know
*/
4. 케이스 가드
패턴이 조건 평가에 맞지 않은 경우 케이스 가드를 사용하여 세부 조건을 설정할 수 있다.
(int X, int Y) XY = (3, 4);
string foo = XY switch
{
{ X: 0, Y: 0 } => "Both are 0",
{ X: > 0, Y: > 0 } => "Both are bigger than 0",
{ X: var x, Y: var y } when x < y => "Y is bigger than X"
};
Console.WriteLine(foo);
/* output:
Both bigger than 0
*/