switch 식을 사용하여 후보 식 목록에서 단일 식을 계산합니다. 평가는 입력 식과 패턴 일치를 기반으로 합니다. 문 컨텍스트에서 switch -like 의미 체계를 지원하는 switch문에 대한 자세한 내용은 switch 참조 하세요.
C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.
설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.
팁 (조언)
C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.
다음 예제에서는 식을 보여 줍니다 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# 언어 사양
참고하십시오
.NET