Share via


Waar- en onwaaroperators

De true operator retourneert de boolwaardetrue om aan te geven dat de operand zeker waar is, terwijl de false operator de bool waarde true retourneert om aan te geven dat de operand absoluut onwaar is.

De C#-taalreferentiedocumenten beschrijven de meest recent uitgebrachte versie van de C#-taal. Het bevat ook de eerste documentatie voor functies in openbare previews voor de aanstaande taalrelease.

De documentatie identificeert alle functies die voor het eerst zijn geïntroduceerd in de laatste drie versies van de taal of in de huidige openbare previews.

Tip

Raadpleeg het artikel over de versiegeschiedenis van de C#-taal om te achterhalen wanneer een functie voor het eerst is geïntroduceerd in C#.

Een type dat zowel truefalse als operators implementeert, moet de volgende semantiek volgen:

  • 'Is dit object waar?' wordt omgezet in operator true. Operator retourneert truetrue als het object is true. Het antwoord is 'Ja, dit object is waar'.
  • 'Is dit object onwaar?' wordt omgezet in de operator false. Operator retourneert falsetrue als het object is false. Het antwoord is 'Ja, dit object is onwaar'.

De true operators en false operators kunnen elkaar niet aanvullen. Dat wil gezegd: zowel de als de truefalse operator kan de bool waarde false voor dezelfde operand retourneren. Als een type een van deze twee operators definieert, moet het ook de andere operator definiëren.

Tip

Gebruik het bool? type als u ondersteuning moet bieden voor logica met drie waarden (bijvoorbeeld wanneer u werkt met databases die ondersteuning bieden voor een booleaanse waarde met drie waarden). C# biedt de & en | operators die ondersteuning bieden voor logica met drie waarden met de bool? operanden. Zie de sectie Logische Booleaanse operatoren van het artikel Booleaanse logische operators voor meer informatie.

Booleaanse expressies

Een type met de gedefinieerde true operator kan het type zijn van een resultaat van een besturingsvoorwaardelijke expressie in de if, do, while en voor instructies en in de voorwaardelijke operator ?:. Zie de sectie Boole-expressies van de C#-taalspecificatie voor meer informatie.

Door de gebruiker gedefinieerde logische operators

Als een type met de gedefinieerde true operator en false operators , kan de |respectievelijk worden geëvalueerd voor de operanden van dat type. Zie de sectie Door de gebruiker gedefinieerde logische operators van de C#-taalspecificatie voor meer informatie.

Opmerking

In het volgende voorbeeld ziet u het type dat zowel als truefalse operatoren definieert. Het type overbelastt ook de logische AND-operator & op een zodanige manier dat de && operator ook kan worden geëvalueerd voor de operanden van dat type.

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

Let op het kortsluitingsgedrag van de && operator. Wanneer de GetFuelLaunchStatus methode wordt geretourneerd LaunchStatus.Red, wordt de rechteroperand van de && operator niet geëvalueerd. Die voorwaarde is absoluut onwaar. Het resultaat van de logische AND is niet afhankelijk van de waarde van de rechteroperand. De uitvoer van het voorbeeld is als volgt:

Getting fuel launch status...
Wait!

Zie ook