Sdílet prostřednictvím


Operátory True a False

Operátor true vrátí logickou hodnotu true , která označuje, že jeho operand je rozhodně pravdivý, zatímco false operátor vrátí bool hodnotu true , která označuje, že jeho operand je rozhodně nepravdivý.

Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.

Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.

Tip

Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.

Typ, který implementuje oba true operátory, false musí dodržovat tyto sémantiky:

  • "Je tento objekt pravdivý?" překládá na operátor true. Operátor true vrátí true , pokud je trueobjekt . Odpověď je Ano, tento objekt je pravdivý.
  • "Je tento objekt false?" překládá na operátor false. Operátor false vrátí true , pokud je falseobjekt . Odpověď je Ano, tento objekt je false.

true Operátory false nejsou zaručeny, že se vzájemně doplňují. To znamená, že operátor true i false operátor může vrátit bool hodnotu false stejného operandu. Pokud typ definuje jeden z těchto dvou operátorů, musí také definovat druhý operátor.

Tip

Tento bool? typ použijte, pokud potřebujete podporovat logiku se třemi hodnotami (například při práci s databázemi, které podporují logický typ se třemi hodnotami). Jazyk C# poskytuje operátory & , | které podporují logiku bool? se třemi hodnotami s operandy. Další informace naleznete v části logické operátory logické operátory s možnou hodnotou Null v článku logické operátory logických operátorů s možnou hodnotou Null.

Logické výrazy

Typ s definovaným true operátorem může být typ výsledku řízení podmíněného výrazu v if, do, while a pro příkazy a v podmíněném operátoru ?:. Další informace najdete v části Logické výrazy specifikace jazyka C#.

Uživatelem definované podmíněné logické operátory

Pokud typ s definovanými a operátory truefalse OR nebo logický operátor AND určitým způsobem, | OR nebo podmíněný logický operátor&AND , v uvedeném pořadí lze vyhodnotit pro operandy daného typu.|| Další informace najdete v části Podmíněné logické operátory definované uživatelem specifikace jazyka C#.

Příklad

Následující příklad představuje typ, který definuje jak a truefalse operátory. Typ také přetěžuje logický operátor & AND takovým způsobem, že && operátor lze také vyhodnotit pro operandy tohoto typu.

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;
    }
}

Všimněte si chování zkratování operátoru && . Když metoda GetFuelLaunchStatus vrátí LaunchStatus.Red, pravý operand && operátoru se nevyhodnocuje. Ten stav je rozhodně nepravdivý. Výsledek logického operátoru AND nezávisí na hodnotě pravého operandu. Výstup příkladu je následující:

Getting fuel launch status...
Wait!

Viz také