다음을 통해 공유


True 및 false 연산자

true 연산자는 booltrue를 반환하여 피연산자가 확실히 true임을 나타내고 false 연산자는 피연산자가 확실히 false임을 나타내는 booltrue를 반환합니다.

C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.

설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.

C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.

두 연산자를 모두 truefalse 구현하는 형식은 다음 의미 체계를 따라야 합니다.

  • "이 개체가 true인가요?"는 연산자 true로 확인됩니다. 연산자 true는 개체가 true인 경우 true를 반환합니다. 대답은 "예, 이 개체는 true입니다"입니다.
  • "이 개체가 false인가요?"는 연산자 false로 확인됩니다. 연산자 false는 개체가 true인 경우 false를 반환합니다. 대답은 "예, 이 개체는 false"입니다.

truefalse 연산자는 서로를 보완한다고 보장되지 않습니다. 즉, truefalse 연산자는 모두 bool 값을 동일한 false 피연산자에 반환할 수도 있습니다. 형식이 두 연산자 중 하나를 정의하는 경우 나머지 연산자도 정의해야 합니다.

bool? 세 가지 값 논리를 지원해야 하는 경우 형식을 사용합니다(예: 3값 부울 형식을 지원하는 데이터베이스로 작업하는 경우). C#은 피연산자와 함께 bool? 세 가지 값 논리를 지원하는 연산자와 연산자를 제공합니다.&| 자세한 내용은 부울 논리 연산자 문서의 Nullable 부울 논리 연산자 섹션을 참조하세요.

부울 식

정의된 true 연산자가 있는 형식은 if, do, whilefor 문과 조건부 연산자?:에서 제어하는 조건식의 결과 형식일 수 있습니다. 자세한 내용은 C# 언어 사양부울 식 섹션을 참조하세요.

사용자 지정 조건부 논리 연산자

정의된 truefalse 연산자가 있는 형식이 특정 방식으로 논리적 OR 연산자 또는 |&하는 경우, 조건부 논리적 OR 연산자|| 또는 조건부 논리적 AND 연산자&&가 해당 형식의 피연산자에 대해 각각 계산될 수 있습니다. 자세한 내용은 C# 언어 사양사용자 정의 조건부 논리 연산자 섹션을 참조하세요.

예제

다음 예제는 truefalse 연산자를 둘 다 정의하는 형식을 제공합니다. 또한 이 형식은 해당 형식의 피연산자에 대해 연산 & 자를 평가할 수 있는 방식으로 && 논리 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를 반환하면 && 연산자의 오른쪽 피연산자는 계산되지 않습니다. 그 조건은 확실히 거짓입니다. 논리 AND의 결과는 오른쪽 피연산자의 값에 의존하지 않습니다. 예제 출력은 다음과 같습니다.

Getting fuel launch status...
Wait!

참고 항목