true 및 false 연산자 - 개체를 부울 값으로 처리
true
연산자는 bool 값 true
를 반환하여 피연산자가 확실히 true임을 나타내고 false
연산자는 피연산자가 확실히 false임을 나타내는 bool
값 true
를 반환합니다.
true
및 false
연산자를 모두 구현하는 형식은 다음 의미 체계를 따라야 합니다.
- "이 개체가 true인가요?"는 연산자
true
로 확인됩니다. 연산자true
는 개체가true
인 경우true
를 반환합니다. 대답은 "예, 이 개체는 true입니다"입니다. - "이 개체가 false인가요?"는 연산자
false
로 확인됩니다. 연산자false
는 개체가false
인 경우true
를 반환합니다. 대답은 "예, 이 개체는 false입니다"입니다.
true
및 false
연산자는 서로를 보완한다고 보장되지 않습니다. 즉, true
및 false
연산자는 모두 bool
값을 동일한 false
피연산자에 반환할 수도 있습니다. 형식이 두 연산자 중 하나를 정의하는 경우 나머지 연산자도 정의해야 합니다.
팁
예를 들어 값이 세 개인 논리를 지원해야 하는 경우(예: 값이 세 개인 부울 형식을 지원하는 데이터베이스에서 작업하는 경우) bool?
형식을 사용합니다. C#은 bool?
피연산자를 사용하여 값이 세 개인 논리를 지원하는 &
및 |
연산자를 제공합니다. 자세한 내용은 부울 논리 연산자 문서의 Nullable 부울 논리 연산자 섹션을 참조하세요.
부울 식
정의된 true
연산자가 있는 형식은 if, do, while 및 for 문과 조건부 연산자?:
에서 제어하는 조건식의 결과 형식일 수 있습니다. 자세한 내용은 C# 언어 사양의 부울 식 섹션을 참조하세요.
사용자 지정 조건부 논리 연산자
정의된 true
및 false
연산자가 있는 형식이 특정 방식으로 논리적 OR 연산자 |
또는 논리적 AND 연산자 &
를 오버로드하는 경우, 조건부 논리적 OR 연산자 ||
또는 조건부 논리적 AND 연산자 &&
가 해당 형식의 피연산자에 대해 각각 계산될 수 있습니다. 자세한 내용은 C# 언어 사양의 사용자 정의 조건부 논리 연산자 섹션을 참조하세요.
예제
다음 예제는 true
및 false
연산자를 둘 다 정의하는 형식을 제공합니다. &&
연산자도 해당 형식의 피연산자에 대해 계산될 수 있는 방식으로 논리적 AND 연산자 &
를 오버로드합니다.
public struct LaunchStatus
{
public static readonly LaunchStatus Green = new LaunchStatus(0);
public static readonly LaunchStatus Yellow = new LaunchStatus(1);
public static readonly LaunchStatus Red = new LaunchStatus(2);
private int status;
private LaunchStatus(int status)
{
this.status = status;
}
public static bool operator true(LaunchStatus x) => x == Green || x == Yellow;
public static bool operator false(LaunchStatus x) => x == Red;
public static LaunchStatus operator &(LaunchStatus x, LaunchStatus y)
{
if (x == Red || y == Red || (x == Yellow && y == Yellow))
{
return Red;
}
if (x == Yellow || y == Yellow)
{
return Yellow;
}
return Green;
}
public static bool operator ==(LaunchStatus x, LaunchStatus y) => x.status == y.status;
public static bool operator !=(LaunchStatus x, LaunchStatus y) => !(x == y);
public override bool Equals(object obj) => obj is LaunchStatus other && this == other;
public override int GetHashCode() => status;
}
public class LaunchStatusTest
{
public static void Main()
{
LaunchStatus okToLaunch = GetFuelLaunchStatus() && GetNavigationLaunchStatus();
Console.WriteLine(okToLaunch ? "Ready to go!" : "Wait!");
}
static LaunchStatus GetFuelLaunchStatus()
{
Console.WriteLine("Getting fuel launch status...");
return LaunchStatus.Red;
}
static LaunchStatus GetNavigationLaunchStatus()
{
Console.WriteLine("Getting navigation launch status...");
return LaunchStatus.Yellow;
}
}
&&
연산자의 단락 동작을 확인합니다. GetFuelLaunchStatus
메서드가 LaunchStatus.Red
를 반환하면 &&
연산자의 오른쪽 피연산자는 계산되지 않습니다. LaunchStatus.Red
가 확실히 false이기 때문입니다. 따라서 논리적 AND의 결과가 오른쪽 피연산자의 값에 종속되지 않습니다. 예제 출력은 다음과 같습니다.
Getting fuel launch status...
Wait!
참고 항목
.NET