Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der Operator true gibt den bool-Wert true zurück, um anzugeben, dass der Operand definitiv „true“ ist, während der Operator false den bool-Wert true zurückgibt, um anzugeben, dass der Operand definitiv „false“ ist.
Beachten Sie, dass ein Typ, der beide Operatoren true und false implementiert, diese Semantik befolgen muss:
- „Ist dieses Objekt true?“ wird in den Operator
trueaufgelöst. Der Operatortruegibttruezurück, wenn das Objekttrueist. Die Antwort lautet „Ja, dieses Objekt ist true“. - „Ist dieses Objekt false?“ wird in den Operator
falseaufgelöst. Der Operatorfalsegibttruezurück, wenn das Objektfalseist. Die Antwort lautet „Ja, dieses Objekt ist false“.
Es ist nicht garantiert, dass sich die Operatoren true und false gegenseitig ergänzen. Dies bedeutet, dass sowohl der Operator true als auch der Operator false möglicherweise den bool-Wert false für den gleichen Operanden zurückgeben. Wenn ein Typ einen dieser beiden Operatoren definiert, muss er auch den anderen Operator definieren.
Tipp
Verwenden Sie den Typ bool?, wenn Sie die dreiwertige Logik unterstützen müssen (z. B. wenn Sie mit Datenbanken arbeiten, die einen dreiwertigen booleschen Typ unterstützen). C# stellt die &- und |-Operatoren zur Verfügung, die die dreiwertige Logik mit den bool?-Operanden unterstützen. Weitere Informationen finden Sie im Abschnitt Boolesche logische Operatoren, die NULL-Werte zulassen im Artikel Boolesche logische Operatoren.
Boolesche Ausdrücke
Ein Typ mit dem definierten true-Operator kann der Typ des Ergebnisses eines steuernden bedingten Ausdrucks in if-, do-, while- und for-Anweisungen und im bedingten Operator ?: sein. Weitere Informationen finden Sie im Abschnitt Boolescher Ausdruck der C#-Sprachspezifikation.
Benutzerdefinierte bedingte logische Operatoren
Wenn ein Typ mit den definierten Operatoren true und false den logischen OR-Operator oder den | in einer bestimmten Weise &, kann der bedingte logische OR-Operator|| bzw. der bedingte logische AND-Operator&& für Operanden dieses Typs ausgewertet werden. Weitere Informationen finden Sie im Abschnitt Benutzerdefinierte bedingte logische Operatoren der C#-Sprachspezifikation.
Beispiel
Das folgende Beispiel zeigt den Typen, der sowohl true- als auch false-Operatoren definiert. Außerdem überlädt der Typ den logischen AND-Operator & so, dass der Operator && auch für die Operanden dieses Typs ausgewertet werden kann.
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;
}
}
Beachten Sie das kurzschließende Verhalten des &&-Operators. Wenn die GetFuelLaunchStatus-Methode LaunchStatus.Red zurückgibt, wird der rechte Operand des &&-Operators nicht ausgewertet. Der Grund dafür ist, dass LaunchStatus.Red definitiv „false“ ist. Dann hängt das Ergebnis des logischen AND-Operators nicht vom Wert des rechten Operanden ab. Im Beispiel wird Folgendes ausgegeben:
Getting fuel launch status...
Wait!