Compartilhar via


Operador false (Referência de C#)

Retorna o bool valor true para indicar que um operando é false e retorna false contrário.

Anteriores à C# versão 2.0, o true e false operadores foram usados para criar tipos anuláveis do valor definido pelo usuário que eram compatíveis com tipos como SqlBool. No entanto, a linguagem agora fornece suporte interno para tipos de valor nulo, e sempre que possível você deve usá-las em vez de sobrecarga de true e false operadores. Para obter mais informações, consulte Tipos anuláveis (Guia de Programação em C#).

Com anuláveis booleanos, a expressão a != b não é necessariamente igual a !(a == b) porque um ou ambos os valores podem ser nulos. Você tem que sobrecarregar ambos os true e false operadores separadamente para tratar corretamente os valores nulos na expressão. O exemplo a seguir mostra como sobrecarga e usar o true e false operadores.

// For example purposes only. Use the built-in nullable bool  
// type (bool?) whenever possible. 
public struct DBBool
{
    // The three possible DBBool values. 
    public static readonly DBBool Null = new DBBool(0);
    public static readonly DBBool False = new DBBool(-1);
    public static readonly DBBool True = new DBBool(1);
    // Private field that stores –1, 0, 1 for False, Null, True. 
    sbyte value;
    // Private instance constructor. The value parameter must be –1, 0, or 1.
    DBBool(int value)
    {
        this.value = (sbyte)value;
    }
    // Properties to examine the value of a DBBool. Return true if this 
    // DBBool has the given value, false otherwise. 
    public bool IsNull { get { return value == 0; } }
    public bool IsFalse { get { return value < 0; } }
    public bool IsTrue { get { return value > 0; } }
    // Implicit conversion from bool to DBBool. Maps true to DBBool.True and 
    // false to DBBool.False. 
    public static implicit operator DBBool(bool x)
    {
        return x ? True : False;
    }
    // Explicit conversion from DBBool to bool. Throws an exception if the 
    // given DBBool is Null; otherwise returns true or false. 
    public static explicit operator bool(DBBool x)
    {
        if (x.value == 0) throw new InvalidOperationException();
        return x.value > 0;
    }
    // Equality operator. Returns Null if either operand is Null; otherwise 
    // returns True or False. 
    public static DBBool operator ==(DBBool x, DBBool y)
    {
        if (x.value == 0 || y.value == 0) return Null;
        return x.value == y.value ? True : False;
    }
    // Inequality operator. Returns Null if either operand is Null; otherwise 
    // returns True or False. 
    public static DBBool operator !=(DBBool x, DBBool y)
    {
        if (x.value == 0 || y.value == 0) return Null;
        return x.value != y.value ? True : False;
    }
    // Logical negation operator. Returns True if the operand is False, Null 
    // if the operand is Null, or False if the operand is True. 
    public static DBBool operator !(DBBool x)
    {
        return new DBBool(-x.value);
    }
    // Logical AND operator. Returns False if either operand is False, 
    // Null if either operand is Null, otherwise True. 
    public static DBBool operator &(DBBool x, DBBool y)
    {
        return new DBBool(x.value < y.value ? x.value : y.value);
    }
    // Logical OR operator. Returns True if either operand is True,  
    // Null if either operand is Null, otherwise False. 
    public static DBBool operator |(DBBool x, DBBool y)
    {
        return new DBBool(x.value > y.value ? x.value : y.value);
    }
    // Definitely true operator. Returns true if the operand is True, false 
    // otherwise. 
    public static bool operator true(DBBool x)
    {
        return x.value > 0;
    }
    // Definitely false operator. Returns true if the operand is False, false 
    // otherwise. 
    public static bool operator false(DBBool x)
    {
        return x.value < 0;
    }
    public override bool Equals(object obj)
    {
        if (!(obj is DBBool)) return false;
        return value == ((DBBool)obj).value;
    }
    public override int GetHashCode()
    {
        return value;
    }
    public override string ToString()
    {
        if (value > 0) return "DBBool.True";
        if (value < 0) return "DBBool.False";
        return "DBBool.Null";
    }
}

Um tipo que sobrecarrega a true e false operadores podem ser usados para a expressão de controle na se, fazer, enquanto, e para instruções e, em expressões condicionais.

Se um tipo define o operador de false, que também deve definir o operador true.

Um tipo diretamente não pode sobrecarregar os operadores lógicos condicionais & & e |, mas um efeito equivalente pode ser obtido pela sobrecarga de operadores lógicos regulares e operadores de true e false.

Especificação da linguagem C#

Para obter mais informações, consulte a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Palavras-chave C#

Operadores em C#

true (Referência de C#)

Conceitos

Guia de Programação em C#

Outros recursos

Referência de C#