?: 연산자(C# 참조)?: operator (C# reference)

3개로 구성된 조건부 연산자라고도 하는 조건부 연산자 ?:은 부울 식을 계산하고 부울 식이 true 또는 false으로 계산되는지에 따라 두 식 중 하나의 계산 결과를 반환합니다.The conditional operator ?:, also known as the ternary conditional operator, evaluates a Boolean expression and returns the result of one of the two expressions, depending on whether the Boolean expression evaluates to true or false. C# 7.2부터 조건부 ref 식은 두 식 중 하나의 결과에 대한 참조를 반환합니다.Beginning with C# 7.2, the conditional ref expression returns the reference to the result of one of the two expressions.

조건 연산자의 구문은 다음과 같습니다.The syntax for the conditional operator is as follows:

condition ? consequent : alternative

condition 식은 true 또는 false로 계산되어야 합니다.The condition expression must evaluate to true or false. conditiontrue로 계산되면 consequent 식이 계산되고 해당 결과가 연산 결과가 됩니다.If condition evaluates to true, the consequent expression is evaluated, and its result becomes the result of the operation. conditionfalse로 계산되면 alternative 식이 계산되고 해당 결과가 연산 결과가 됩니다.If condition evaluates to false, the alternative expression is evaluated, and its result becomes the result of the operation. consequent 또는 alternative만 계산됩니다.Only consequent or alternative is evaluated.

consequentalternative의 형식이 동일해야 하거나 한 형식에서 다른 형식으로 암시적 변환이 있어야 합니다.The type of consequent and alternative must be the same, or there must be an implicit conversion from one type to the other.

조건부 연산자는 오른쪽 결합성입니다. 즉, 다음 형식의 식을 가정해 보세요.The conditional operator is right-associative, that is, an expression of the form

a ? b : c ? d : e

이 식은 다음과 같이 계산됩니다.is evaluated as

a ? b : (c ? d : e)

다음과 같은 니모닉 디바이스를 사용하여 조건부 연산자의 평가 방식을 기억할 수 있습니다.You can use the following mnemonic device to remember how the conditional operator is evaluated:

is this condition true ? yes : no

다음 예제에서는 조건부 연산자의 사용법을 보여 줍니다.The following example demonstrates the usage of the conditional operator:

double sinc(double x) => x != 0.0 ? Math.Sin(x) / x : 1;

Console.WriteLine(sinc(0.1));
Console.WriteLine(sinc(0.0));
// Output:
// 0.998334166468282
// 1

조건부 ref 식Conditional ref expression

C# 7.2부터 조건부 ref 식을 사용하여 두 식 중 하나의 결과에 대한 참조를 반환할 수 있습니다.Beginning with C# 7.2, you can use the conditional ref expression to return the reference to the result of one of the two expressions. ref 지역 또는 ref readonly 지역 변수에 해당 참조를 할당하거나, 참조 반환 값 또는 ref 메서드 매개 변수로 사용할 수 있습니다.You can assign that reference to a ref local or ref readonly local variable, or use it as a reference return value or as a ref method parameter.

조건부 ref 식의 구문은 다음과 같습니다.The syntax for the conditional ref expression is as follows:

condition ? ref consequent : ref alternative

원래 조건부 연산자와 마찬가지로 조건부 ref 식은 두 식 중 하나(consequent 또는 alternative)만 계산합니다.Like the original conditional operator, the conditional ref expression evaluates only one of the two expressions: either consequent or alternative.

조건부 ref 식의 경우 consequentalternative의 형식이 동일해야 합니다.In the case of the conditional ref expression, the type of consequent and alternative must be the same.

다음 예제에서는 조건부 ref 식의 사용법을 보여 줍니다.The following example demonstrates the usage of the conditional ref expression:

var smallArray = new int[] { 1, 2, 3, 4, 5 };
var largeArray = new int[] { 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

조건부 연산자 및 if..elseConditional operator and an if..else statement

if-else 문보다 조건부 연산자를 사용하면 조건부로 값을 컴퓨팅해야 하는 경우 코드가 보다 간결해질 수 있습니다.Use of the conditional operator instead of an if-else statement might result in more concise code in cases when you need conditionally to compute a value. 다음 예제에서는 정수를 음수 또는 음수가 아닌 값으로 분류하는 두 가지 방법을 보여 줍니다.The following example demonstrates two ways to classify an integer as negative or nonnegative:

int input = new Random().Next(-5, 5);

string classify;
if (input >= 0)
{
    classify = "nonnegative";
}
else
{
    classify = "negative";
}

classify = (input >= 0) ? "nonnegative" : "negative";

연산자 오버로드 가능성Operator overloadability

사용자 정의 형식으로 조건부 연산자를 오버로드할 수 없습니다.A user-defined type cannot overload the conditional operator.

C# 언어 사양C# language specification

자세한 내용은 C# 언어 사양조건부 연산자 섹션을 참조하세요.For more information, see the Conditional operator section of the C# language specification.

조건부 ref 식에 대한 자세한 내용은 기능 제안 노트를 참조하세요.For more information about the conditional ref expression, see the feature proposal note.

참고 항목See also