operator benar dan salah - perlakukan objek Anda sebagai nilai Boolean
Operator true
mengembalikan nilai true
bool untuk menunjukkan bahwa operand-nya pasti benar, sementara false
operator mengembalikan bool
nilai true
untuk menunjukkan bahwa operand-nya pasti salah.
Perhatikan bahwa jenis yang menerapkan operator true
dan false
harus mengikuti semantik ini:
- "Apakah objek ini benar?" memutuskan untuk operator
true
. Operatortrue
mengembalikantrue
jika objek adalahtrue
. Jawabannya adalah "Ya, objek ini benar". - "Apakah objek ini salah?" memutuskan ke operator
false
. Operatorfalse
mengembalikantrue
jika objek adalahfalse
. Jawabannya adalah "Ya, objek ini salah"
Operator true
dan false
tidak dijamin untuk saling melengkapi. Artinya, baik operator true
dan false
mungkin mengembalikan bool
nilai false
untuk operan yang sama. Jika jenis mendefinisikan salah satu dari dua operator ini, jenis juga harus menentukan operator lain.
Tip
Gunakan tipe bool?
, jika Anda perlu mendukung logika tiga nilai (misalnya, saat Anda bekerja dengan basis data yang mendukung tipe Boolean tiga nilai). C# menyediakan operator &
dan |
yang mendukung logika bernilai tiga dengan operan bool?
. Untuk informasi selengkapnya, lihat bagian Operator logis Boolean yang dapat diubah ke null dari artikel Operator logis Boolean .
Ekspresi Boolean
Jenis dengan operator yang ditentukan true
dapat menjadi jenis hasil dari ekspresi kondisional pengontrol dalam jika, lakukan, sementara, dan untuk pernyataan dan di operator kondisional?:
. Untuk informasi selengkapnya, lihat bagian ekspresi Boolean dari spesifikasi bahasa C#.
Operator logika bersyarat yang ditentukan pengguna
Jika jenis dengan operator yang ditentukan true
dan membebani operator OR logis atau operator |
&
LOGIS AND dengan cara tertentu, operator ATAU logis bersyar atau operator ||
&&
AND logis bersyar, masing-masing dapat dievaluasi untuk operand jenis tersebut.false
Untuk informasi selengkapnya, lihat bagian Operator logis kondisional yang ditentukan pengguna dari bagian spesifikasi bahasa C#.
Contoh
Contoh berikut menyajikan tipe yang mendefinisikan kedua operator true
dan false
. Tipe ini juga membebani operator logika AND &
sedemikian rupa sehingga operator &&
juga dapat dievaluasi untuk operan dari tipe tersebut.
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;
}
}
Perhatikan perilaku sirkuit pendek operator &&
. GetFuelLaunchStatus
Ketika metode mengembalikan LaunchStatus.Red
, operand &&
kanan operator tidak dievaluasi. Itu karena LaunchStatus.Red
sangat salah. Maka hasil logika AND tidak bergantung pada nilai operan kanan. Output dari contoh ini adalah sebagai berikut:
Getting fuel launch status...
Wait!