?: 연산자 - 3개로 구성된 조건 연산자
다음 예제와 같이, 3개로 구성된 조건 연산자라고도 하는 조건 연산자 ?:
은 부울 식을 계산하고 부울 식이 true
또는 false
로 계산되는지에 따라 두 식 중 하나의 결과를 반환합니다.
string GetWeatherDisplay(double tempInCelsius) => tempInCelsius < 20.0 ? "Cold." : "Perfect!";
Console.WriteLine(GetWeatherDisplay(15)); // output: Cold.
Console.WriteLine(GetWeatherDisplay(27)); // output: Perfect!
위의 예제에서 볼 수 있듯이 조건 연산자의 구문은 다음과 같습니다.
condition ? consequent : alternative
condition
식은 true
또는 false
로 계산되어야 합니다. condition
이 true
로 계산되면 consequent
식이 계산되고 해당 결과가 연산 결과가 됩니다. condition
이 false
로 계산되면 alternative
식이 계산되고 해당 결과가 연산 결과가 됩니다. consequent
또는 alternative
만 계산됩니다. 조건식은 대상 형식입니다. 즉, 조건식의 대상 유형을 알고 있는 경우 consequent
및 alternative
의 형식은 다음 예제와 같이 대상 유형으로 암시적으로 변환 가능해야 합니다.
var rand = new Random();
var condition = rand.NextDouble() > 0.5;
int? x = condition ? 12 : null;
IEnumerable<int> xs = x is null ? new List<int>() { 0, 1 } : new int[] { 2, 3 };
조건식의 대상 유형을 모르는 경우(예: var
키워드 사용) 또는 consequent
및 alternative
의 형식이 같아야 하거나 한 형식에서 다른 형식으로 암시적인 변환이 있어야 합니다.
var rand = new Random();
var condition = rand.NextDouble() > 0.5;
var x = condition ? 12 : (int?)null;
조건부 연산자는 오른쪽 결합성입니다. 즉, 다음 형식의 식을 가정해 보세요.
a ? b : c ? d : e
이 식은 다음과 같이 계산됩니다.
a ? b : (c ? d : e)
팁
다음과 같은 니모닉 디바이스를 사용하여 조건부 연산자의 평가 방식을 기억할 수 있습니다.
is this condition true ? yes : no
조건부 ref 식
조건부 참조 식은 다음 예와 같이 조건부로 변수 참조를 반환합니다.
int[] smallArray = {1, 2, 3, 4, 5};
int[] largeArray = {10, 20, 30, 40, 50};
int index = 7;
ref int refValue = ref ((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]);
refValue = 0;
index = 2;
((index < 5) ? ref smallArray[index] : ref largeArray[index - 5]) = 100;
Console.WriteLine(string.Join(" ", smallArray));
Console.WriteLine(string.Join(" ", largeArray));
// Output:
// 1 2 100 4 5
// 10 20 0 40 50
조건부 참조 식의 결과를 ref
할당하거나, 이를 참조 반환으로 사용하거나 ref
, out
, in
또는 ref readonly
메서드 매개변수로 전달합니다. 앞의 예와 같이 조건부 참조 식의 결과에 할당할 수도 있습니다.
조건부 ref 식의 구문은 다음과 같습니다.
condition ? ref consequent : ref alternative
조건 연산자와 마찬가지로 조건 참조 식은 두 식 중 하나만 평가합니다(consequent
또는 alternative
).
조건부 참조 식에서 consequent
및 alternative
의 형식은 동일해야 합니다. 조건부 참조 식은 대상 형식이 아닙니다.
조건부 연산자 및 if
문
if
문 대신 조건부 연산자를 사용하면 조건부로 값을 컴퓨팅해야 하는 경우 코드가 보다 간결해질 수 있습니다. 다음 예제에서는 정수를 음수 또는 음수가 아닌 값으로 분류하는 두 가지 방법을 보여 줍니다.
int input = new Random().Next(-5, 5);
string classify;
if (input >= 0)
{
classify = "nonnegative";
}
else
{
classify = "negative";
}
classify = (input >= 0) ? "nonnegative" : "negative";
연산자 오버로드 가능성
사용자 정의 형식은 조건부 연산자를 오버로드할 수 없습니다.
C# 언어 사양
자세한 내용은 C# 언어 사양의 조건부 연산자 섹션을 참조하세요.
최신 기능에 대한 사양은 다음과 같습니다.
참고 항목
.NET