Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O true operador retorna o para indicar que seu operando é definitivamente verdadeiro, enquanto o true operador retorna o false valor bool para indicar que seu operando é definitivamente falso.
A referência da linguagem C# documenta a versão mais recentemente lançada da linguagem C#. Contém também documentação inicial para funcionalidades em versões preliminares públicas para a próxima versão da linguagem.
A documentação identifica qualquer funcionalidade introduzida pela primeira vez nas últimas três versões da língua ou em pré-visualizações públicas atuais.
Gorjeta
Para saber quando uma funcionalidade foi introduzida pela primeira vez em C#, consulte o artigo sobre o histórico de versões da linguagem C#.
Um tipo que implemente ambos true e false operadores deve seguir estas semânticas:
- "Este objeto é verdadeiro?" resolve para o operador
true. O operadortrueretornatruese o objeto fortrue. A resposta é "Sim, este objeto é verdadeiro". - "Este objeto é falso?" resolve para o operador
false. O operadorfalseretornatruese o objeto forfalse. A resposta é "Sim, este objeto é falso".
Não é garantido que os true operadores se false complementem. Ou seja, o operador e true pode false retornar o bool valor false para o mesmo operando. Se um tipo define um desses dois operadores, ele também deve definir o outro operador.
Gorjeta
Use o bool? tipo se precisar de suportar lógica de três valores (por exemplo, quando trabalhar com bases de dados que suportam um tipo booleano de três valores). C# fornece os & operadores e | que suportam lógica de três valores com os bool? operandos. Para obter mais informações, consulte a seção Operadores lógicos booleanos anuláveis do artigo Operadores lógicos booleanos.
Expressões booleanas
Um tipo com o operador definido true pode ser o tipo de resultado de uma expressão condicional de controle nas instruções if, do, while e for e nooperador ?:condicional. Para obter mais informações, consulte a seção Expressões booleanas da especificação da linguagem C#.
Operadores lógicos condicionais definidos pelo usuário
Se um tipo com os operadores definidos e sobrecarregartrue Para obter mais informações, consulte a seção Operadores lógicos condicionais definidos pelo usuário da especificação da linguagem C#.
Exemplo
O exemplo a seguir apresenta o tipo que define ambos e truefalse operadores. O tipo também sobrecarrega o operador & AND lógico de tal forma que o && operador pode também 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 GetFuelLaunchStatus método retorna LaunchStatus.Red, o operando direito do && operador não é avaliado. Essa condição é definitivamente falsa. O resultado do AND lógico não depende do valor do operando direito. A saída do exemplo é a seguinte:
Getting fuel launch status...
Wait!