Selection 문 -
및 if-elseswitch 문은 if식 값에 따라 가능한 여러 경로에서 실행할 문을 선택합니다.
이 문은if 제공된 부울 식이 .로 계산되는 경우에만 문을 실행합니다true. 이 if-else 문을 사용하면 부울 식에 따라 따라 수행할 두 코드 경로 중 하나를 선택할 수 있습니다. 문은 switch 식과 패턴 일치를 기반으로 실행할 문 목록을 선택합니다.
if 선언문
문은 if 다음 두 가지 형식 중 어느 것일 수 있습니다.
다음 예제와 같이 파트가 있는
else문은if부울 식의 값에 따라 실행할 두 문 중 하나를 선택합니다.DisplayWeatherReport(15.0); // Output: Cold. DisplayWeatherReport(24.0); // Output: Perfect! void DisplayWeatherReport(double tempInCelsius) { if (tempInCelsius < 20.0) { Console.WriteLine("Cold."); } else { Console.WriteLine("Perfect!"); } }파트가
else없는 문은if다음 예제와 같이 부울 식이 계산되는true경우에만 본문을 실행합니다.DisplayMeasurement(45); // Output: The measurement value is 45 DisplayMeasurement(-3); // Output: Warning: not acceptable value! The measurement value is -3 void DisplayMeasurement(double value) { if (value < 0 || value > 100) { Console.Write("Warning: not acceptable value! "); } Console.WriteLine($"The measurement value is {value}"); }
다음 예제와 같이 문을 중첩 if 하여 여러 조건을 확인할 수 있습니다.
DisplayCharacter('f'); // Output: A lowercase letter: f
DisplayCharacter('R'); // Output: An uppercase letter: R
DisplayCharacter('8'); // Output: A digit: 8
DisplayCharacter(','); // Output: Not alphanumeric character: ,
void DisplayCharacter(char ch)
{
if (char.IsUpper(ch))
{
Console.WriteLine($"An uppercase letter: {ch}");
}
else if (char.IsLower(ch))
{
Console.WriteLine($"A lowercase letter: {ch}");
}
else if (char.IsDigit(ch))
{
Console.WriteLine($"A digit: {ch}");
}
else
{
Console.WriteLine($"Not alphanumeric character: {ch}");
}
}
식 컨텍스트에서 조건부 연산 ?: 자를 사용하여 부울 식의 값을 기반으로 두 식 중 하나를 평가할 수 있습니다.
switch 선언문
다음 예제와 같이 문은 switch 일치 식과 패턴 일치를 기반으로 실행할 문 목록을 선택합니다.
DisplayMeasurement(-4); // Output: Measured value is -4; too low.
DisplayMeasurement(5); // Output: Measured value is 5.
DisplayMeasurement(30); // Output: Measured value is 30; too high.
DisplayMeasurement(double.NaN); // Output: Failed measurement.
void DisplayMeasurement(double measurement)
{
switch (measurement)
{
case < 0.0:
Console.WriteLine($"Measured value is {measurement}; too low.");
break;
case > 15.0:
Console.WriteLine($"Measured value is {measurement}; too high.");
break;
case double.NaN:
Console.WriteLine("Failed measurement.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
앞의 예제에서 문은 switch 다음 패턴을 사용합니다.
중요합니다
문에서 지원하는 switch 패턴에 대한 자세한 내용은 패턴을 참조하세요.
앞의 예제에서는 사례도 보여 줍니다 default . 이 사례는 default 일치 식이 다른 사례 패턴과 일치하지 않을 때 실행할 문을 지정합니다. 일치 식이 사례 패턴과 일치하지 않고 대/소문자를 구분하지 않는 default 경우 컨트롤은 switch 문을 통과합니다.
문은 switch 첫 번째 switch 섹션에서대/소문자 패턴이 일치 식과 일치하고 케이스 가드(있는 경우)가 계산되는 문 목록을 실행합니다true. 문은 switch 위에서 아래로 텍스트 순서로 대/소문자 패턴을 평가합니다. 컴파일러는 문에 연결할 수 없는 대/소문자가 포함된 경우 switch 오류를 생성합니다. 대문자로 이미 처리되었거나 패턴이 일치할 수 없는 경우입니다.
비고
케이스는 default 문 내 switch 의 모든 위치에 나타날 수 있습니다. 해당 위치에 default 관계없이 다른 모든 사례 패턴이 일치하지 goto default; 않거나 스위치 섹션 중 하나에서 문이 실행되는 경우에만 케이스가 평가됩니다.
다음 예제와 같이 문의 한 섹션 switch 에 대해 여러 대/소문자 패턴을 지정할 수 있습니다.
DisplayMeasurement(-4); // Output: Measured value is -4; out of an acceptable range.
DisplayMeasurement(50); // Output: Measured value is 50.
DisplayMeasurement(132); // Output: Measured value is 132; out of an acceptable range.
void DisplayMeasurement(int measurement)
{
switch (measurement)
{
case < 0:
case > 100:
Console.WriteLine($"Measured value is {measurement}; out of an acceptable range.");
break;
default:
Console.WriteLine($"Measured value is {measurement}.");
break;
}
}
문 내에서 switch 컨트롤은 한 스위치 섹션에서 다음 섹션으로 넘어갈 수 없습니다. 이 섹션의 예제에서 볼 수 있듯이 일반적으로 각 스위치 섹션의 끝에 있는 문을 사용하여 break 문에서 제어를 switch 전달합니다.
반환 및 throw 문을 사용하여 문에서 switch 제어를 전달할 수도 있습니다. 대체 동작을 모방하고 컨트롤을 다른 스위치 섹션으로 전달하려면 이goto 문을 사용할 수 있습니다.
중요합니다
모든 스위치 섹션은 또는 gotoreturn.로 break끝나야 합니다. 한 스위치 섹션에서 다음 스위치 섹션으로 넘어가면 컴파일러 오류가 발생합니다. 그러나 위의 예제와 같이 case < 0: 여러 스위치 레이블을 동일한 스위치 섹션에 적용할 수 있습니다. 이러한 의도적인 디자인 선택을 통해 동일하거나 상호 종속적인 논리를 공유하는 여러 사례를 간결하게 처리할 수 있습니다.
식 컨텍스트에서 식을 사용하여 switch 식과 패턴 일치를 기반으로 후보 식 목록에서 단일 식을 평가할 수 있습니다.
중요합니다
switch 식과 switch 문 간의 차이점:
- switch 문 은 코드 블록 내에서 실행 흐름을 제어하는 데 사용됩니다.
- switch 식 은 일반적으로 값 반환 및 값 할당의 컨텍스트에서 사용되며, 종종 식 본문 멤버로 사용됩니다.
- switch 식 대/소문자 섹션은 비워 둘 수 없으며 switch 문은 비워 둘 수 있습니다.
케이스 가드
대/소문자 패턴이 스위치 섹션의 실행 조건을 지정하기에 충분하지 않을 수 있습니다. 이러한 경우 케이스 가드를 사용할 수 있습니다. 일치 패턴과 함께 충족해야 하는 추가 조건입니다. 대/소문자 보호는 부울 식이어야 합니다. 다음 예제와 같이 패턴을 따르는 키워드 뒤에 when 대/소문자 보호기를 지정합니다.
DisplayMeasurements(3, 4); // Output: First measurement is 3, second measurement is 4.
DisplayMeasurements(5, 5); // Output: Both measurements are valid and equal to 5.
void DisplayMeasurements(int a, int b)
{
switch ((a, b))
{
case (> 0, > 0) when a == b:
Console.WriteLine($"Both measurements are valid and equal to {a}.");
break;
case (> 0, > 0):
Console.WriteLine($"First measurement is {a}, second measurement is {b}.");
break;
default:
Console.WriteLine("One or both measurements are not valid.");
break;
}
}
앞의 예제에서는 중첩된 관계형 패턴이 있는 위치 패턴을 사용합니다.
C# 언어 사양
자세한 내용은 C# 언어 사양의 다음 섹션을 참조하세요.
패턴에 대한 자세한 내용은 C# 언어 사양의 패턴 및 패턴 일치 섹션을 참조하세요.
참고하십시오
.NET