Comparteix via


Operadores True y false

El operador true devuelve el valor booltrue para indicar que su operando es definitivamente true, mientras que el operador false devuelve el valor booltrue para indicar que su operando es definitivamente false.

La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.

La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.

Sugerencia

Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.

Un tipo que implementa los true operadores y false debe seguir esta semántica:

  • "¿Este objeto es true?" se resuelve en el operador true. El operador true devuelve true si el objeto es true. La respuesta es "Sí, este objeto es true".
  • "¿Este objeto es false?" se resuelve en el operador false. El operador false devuelve true si el objeto es false. La respuesta es "Sí, este objeto es false".

Los operadores true y false no garantizan que se complementen entre sí. Es decir, tanto el operador true como false podrían devolver el valor boolfalse del mismo operando. Si un tipo define uno de estos dos operadores, también debe definir el otro operador.

Sugerencia

Use el bool? tipo si necesita admitir lógica de tres valores (por ejemplo, cuando se trabaja con bases de datos que admiten un tipo booleano con tres valores). C# proporciona los & operadores y | que admiten lógica de tres valores con los bool? operandos. Para más información, consulte la sección Operadores lógicos booleanos que aceptan valores NULL del artículo Operadores lógicos booleanos.

Expresiones booleanas

Un tipo con el operador true definido puede ser el tipo de un resultado de una expresión condicional de control en las instruciones if, do, while y for y en el operador condicional ?:. Para más información, vea la sección Expresiones booleanas de la Especificación del lenguaje C#.

Operadores lógicos condicionales definidos por el usuario

Si un tipo con los operadores true y false definidos sobrecarga el operador lógico OR| o el operador lógico AND& de una manera determinada, el operador lógico condicional OR|| o el operador lógico condicional AND&&, respectivamente, se puede evaluar para los operandos de ese tipo. Para obtener más información, vea la sección Operadores lógicos condicionales definidos por el usuario de la Especificación del lenguaje C#.

Ejemplo

El ejemplo siguiente muestra el tipo que define los operadores true y false. El tipo también sobrecarga el operador & LÓGICO AND de tal manera que el && operador también se pueda evaluar para los operandos de ese tipo.

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

Tenga en cuenta el comportamiento de cortocircuito del operador &&. Cuando el método GetFuelLaunchStatus devuelve LaunchStatus.Red, el operando derecho del operador && no se evalúa. Esa condición es definitivamente falsa. El resultado del and lógico no depende del valor del operando derecho. El resultado del ejemplo es el siguiente:

Getting fuel launch status...
Wait!

Consulte también