Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O operador true retorna o bool valor true para indicar que seu operando é definitivamente verdadeiro, enquanto o operador false retorna o bool valor true para indicar que seu operando é definitivamente falso.
A linguagem C# faz referência a documentos da versão mais recentemente lançada da linguagem C#. Ele também contém a documentação inicial para funcionalidades em pré-visualizações públicas para o próximo lançamento do idioma.
A documentação identifica qualquer recurso introduzido pela primeira vez nas três últimas versões do idioma ou nas versões prévias públicas atuais.
Dica
Para descobrir quando um recurso foi introduzido pela primeira vez em C#, consulte o artigo sobre o histórico de versão da linguagem C#.
Um tipo que implementa ambos true e false os operadores devem seguir esta semântica:
- “Esse objeto é verdadeiro?” resolve para a operadora
true. Operadortrueretornatruese o objeto fortrue. A resposta é “Sim, esse objeto é verdadeiro”. - “Esse objeto é falso?” resolve para a operadora
false. Operadorfalseretornatruese o objeto forfalse. A resposta é "Sim, este objeto é falso".
Não é garantido que os operadores true e false se complementem. Ou seja, ambos os operadores true e false podem retornar o valor boolfalse para o mesmo operando. Se um tipo definir um desses dois operadores, ele também deverá definir o outro operador.
Dica
Use o bool? tipo se precisar dar suporte à lógica de três valores (por exemplo, quando você trabalha com bancos de dados que dão suporte a um tipo booliano com três valores). O C# fornece os operadores e | os & operadores que dão suporte à lógica de três valores com os bool? operandos. Para obter mais informações, confira a seção Operadores lógicos booleanos anuláveis do artigo Operadores lógicos boolianos.
Expressões boolianas
Um tipo com o operador true definido pode ser o tipo de resultado de uma expressão condicional de controle nas instruções if, do, while e for e no operador condicional ?:. Para saber mais, confira a seção Expressões boolianas da Especificação da linguagem C#.
Operadores lógicos condicionais definidos pelo usuário
Se um tipo com os trueoperadoresfalse definidos sobrecarregar o operador OR lógico| ou o operador AND lógico& de uma certa maneira, o operador OR lógico condicional|| ou operador AND lógico condicional&&, respectivamente, poderá ser avaliado para os operandos desse tipo. Para obter mais informações, veja a seção Operadores lógicos condicionais definidos pelo usuário na especificação da linguagem C#.
Exemplo
O exemplo a seguir apresenta o tipo que define os dois operadores, true e false. O tipo também sobrecarrega o operador & AND lógico de forma que o && operador também possa ser avaliado para os operandos desse 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;
}
}
Observe o comportamento de curto-circuito do operador &&. Quando o método GetFuelLaunchStatus retorna LaunchStatus.Red, o operando à direita do operador && não é avaliado. Essa condição é definitivamente falsa. O resultado do AND lógico não depende do valor do operando à direita. A saída do exemplo é a seguinte:
Getting fuel launch status...
Wait!