switch 식 - 키워드를 사용하여
식을 사용하여 switch 입력 식과 패턴 일치를 기반으로 후보 식 목록에서 단일 식을 평가합니다. 문 컨텍스트에서 switch -like 의미 체계를 지원하는 switch문에 대한 자세한 내용은 switch 참조 하세요.
다음 예제에서는 온라인 맵에서 나타내는 시각적 방향의 switch 값을 해당 카디널 길로 변환하는 식을 보여 enum 줍니다.
public static class SwitchExample
{
public enum Direction
{
Up,
Down,
Right,
Left
}
public enum Orientation
{
North,
South,
East,
West
}
public static Orientation ToOrientation(Direction direction) => direction switch
{
Direction.Up => Orientation.North,
Direction.Right => Orientation.East,
Direction.Down => Orientation.South,
Direction.Left => Orientation.West,
_ => throw new ArgumentOutOfRangeException(nameof(direction), $"Not expected direction value: {direction}"),
};
public static void Main()
{
var direction = Direction.Right;
Console.WriteLine($"Map view direction is {direction}");
Console.WriteLine($"Cardinal orientation is {ToOrientation(direction)}");
// Output:
// Map view direction is Right
// Cardinal orientation is East
}
}
앞의 예제에서는 식의 기본 요소를 보여줍니다.switch
- 식 뒤에 키워드가 잇는 식입니다
switch. 앞의 예제에서는 메서드 매개 변수입니다direction. - 쉼표로 구분된 식 암입니다.
switch각switch식 암에는 패턴, 선택적 케이스 가드,=>토큰 및 식이 포함됩니다.
앞의 예제에서 식은 switch 다음 패턴을 사용합니다.
-
상수 패턴: 열거형의
Direction정의된 값을 처리합니다. -
무시 패턴: 열거형의
Direction해당 멤버가 없는 정수 값을 처리합니다(예:(Direction)10). 이렇게 하면 식이switch완전해집니다.
중요합니다
식에서 지원하는 패턴 및 더 많은 예제에 switch 대한 자세한 내용은 패턴을 참조하세요.
식의 switch 결과는 패턴이 입력 식과 일치하고 케이스 가드(있는 경우)가 계산되는 첫 번째 switch 식 암의 식 값입니다 true. 식 암은 switch 텍스트 순서로 계산됩니다.
컴파일러는 더 높은 switch 식 암이 모든 값과 일치하기 때문에 더 낮은 switch 식 암을 선택할 수 없는 경우 오류를 생성합니다.
케이스 가드
패턴이 암 식의 평가 조건을 지정하기에 충분히 표현되지 않을 수 있습니다. 이러한 경우 케이스 가드를 사용할 수 있습니다.
케이스 가드는 일치하는 패턴과 함께 충족해야 하는 또 다른 조건입니다. 대/소문자 보호는 부울 식이어야 합니다. 다음 예제와 같이 패턴을 따르는 키워드 뒤에 when 대/소문자 보호기를 지정합니다.
public readonly struct Point
{
public Point(int x, int y) => (X, Y) = (x, y);
public int X { get; }
public int Y { get; }
}
static Point Transform(Point point) => point switch
{
{ X: 0, Y: 0 } => new Point(0, 0),
{ X: var x, Y: var y } when x < y => new Point(x + y, y),
{ X: var x, Y: var y } when x > y => new Point(x - y, y),
{ X: var x, Y: var y } => new Point(2 * x, 2 * y),
};
앞의 예제에서는 중첩된 var 패턴이 있는 속성패턴을 사용합니다.
완전하지 않은 스위치 식
switch 식의 패턴이 입력 값과 일치하지 않는 경우 런타임은 예외를 throw합니다. .NET Core 3.0 이상 버전에서는 예외가 있습니다 System.Runtime.CompilerServices.SwitchExpressionException. .NET Framework에서 예외는 .입니다 InvalidOperationException. 대부분의 경우 식이 가능한 모든 입력 값을 처리하지 않는 경우 switch 컴파일러는 경고를 생성합니다.
목록 패턴은 가능한 모든 입력이 처리되지 않는 경우 경고를 생성하지 않습니다.
팁 (조언)
식이 switch 가능한 모든 입력 값을 처리하도록 하려면 식 암에 switch무시 패턴을 제공합니다.
C# 언어 사양
자세한 내용은 C# 언어 사양의 식 섹션을 참조 switch 하세요.
참고하십시오
.NET