Bagikan melalui


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. Operator true mengembalikan true jika objek adalah true. Jawabannya adalah "Ya, objek ini benar".
  • "Apakah objek ini salah?" memutuskan ke operator false. Operator false mengembalikan true jika objek adalah false. 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!

Lihat juga