Tipe enumerasi (referensi C#)

Sebuah tipe enumerasi (atau tipe enum) adalah tipe nilai yang ditentukan oleh sekumpulan konstanta bernama dari tipe numerik integral yang mendasar. Untuk menentukan tipe enumerasi, gunakan kata kunci enum dan tentukan nama enum member:

enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

Secara default, nilai konstanta terkait dari enum member bertipe int; dimulai dengan nol dan meningkat satu per satu mengikuti urutan teks definisi. Anda dapat secara eksplisit menentukan tipe numerik integral lainnya sebagai tipe enumerasi yang mendasar. Anda juga dapat secara eksplisit menentukan nilai konstanta terkait, seperti yang ditunjukkan contoh berikut:

enum ErrorCode : ushort
{
    None = 0,
    Unknown = 1,
    ConnectionLost = 100,
    OutlierReading = 200
}

Anda tidak dapat menentukan method di dalam definisi tipe enumerasi. Untuk menambahkan fungsionalitas ke tipe enumerasi, buat method ekstensi.

Nilai default dari tipe E enumerasi adalah nilai yang dihasilkan oleh expression (E)0, meskipun nol tidak memiliki enum member yang sesuai.

Anda menggunakan tipe enumerasi untuk mewakili pilihan dari sekumpulan nilai yang saling eksklusif atau kombinasi pilihan. Untuk mewakili kombinasi pilihan, tentukan tipe enumerasi sebagai bendera bit.

Tipe enumerasi sebagai bendera bit

Jika Anda ingin tipe enumerasi mewakili kombinasi pilihan, tentukan enum member untuk pilihan tersebut sehingga pilihan individual adalah bidang bit. Artinya, nilai-nilai terkait dari enum member tersebut harus berupa pangkat dua. Kemudian, Anda dapat menggunakan operator logika bitwise | atau & untuk menggabungkan pilihan atau kombinasi pilihan bersinggungan. Untuk menunjukkan bahwa tipe enumerasi mendeklarasikan bidang bit, terapkan atribut Flags ke dalamnya. Seperti yang ditunjukkan contoh berikut, Anda juga dapat menyertakan beberapa kombinasi khas dalam definisi tipe enumerasi.

[Flags]
public enum Days
{
    None      = 0b_0000_0000,  // 0
    Monday    = 0b_0000_0001,  // 1
    Tuesday   = 0b_0000_0010,  // 2
    Wednesday = 0b_0000_0100,  // 4
    Thursday  = 0b_0000_1000,  // 8
    Friday    = 0b_0001_0000,  // 16
    Saturday  = 0b_0010_0000,  // 32
    Sunday    = 0b_0100_0000,  // 64
    Weekend   = Saturday | Sunday
}

public class FlagsEnumExample
{
    public static void Main()
    {
        Days meetingDays = Days.Monday | Days.Wednesday | Days.Friday;
        Console.WriteLine(meetingDays);
        // Output:
        // Monday, Wednesday, Friday

        Days workingFromHomeDays = Days.Thursday | Days.Friday;
        Console.WriteLine($"Join a meeting by phone on {meetingDays & workingFromHomeDays}");
        // Output:
        // Join a meeting by phone on Friday

        bool isMeetingOnTuesday = (meetingDays & Days.Tuesday) == Days.Tuesday;
        Console.WriteLine($"Is there a meeting on Tuesday: {isMeetingOnTuesday}");
        // Output:
        // Is there a meeting on Tuesday: False

        var a = (Days)37;
        Console.WriteLine(a);
        // Output:
        // Monday, Wednesday, Saturday
    }
}

Untuk informasi dan contoh selengkapnya, lihat System.FlagsAttribute halaman referensi API dan member Non-eksklusif dan bagian atribute Flags di System.Enum halaman referensi API.

Sistem.tipe Enum dan enum constraint

Tipenya System.Enum adalah class dasar abstrak dari semua tipe enumerasi. Ini menyediakan sejumlah method untuk mendapatkan informasi tentang tipe enumerasi dan nilainya. Untuk informasi dan contoh selengkapnya, lihat System.Enum halaman referensi API.

Anda dapat menggunakan System.Enum dalam batasan kelas dasar (yang dikenal sebagai batasan enum) untuk menentukan bahwa parameter jenis adalah jenis enumerasi. Tipe enumerasi apa pun juga memenuhi constraintstruct, yang digunakan untuk menentukan bahwa tipe parameter adalah tipe nilai yang tidak dapat diubah ke null.

Konversi

Untuk tipe enumerasi apa pun, ada konversi eksplisit antara tipe enumerasi dan tipe integral yang mendasar. Jika Anda cast nilai enum ke tipe yang mendasarnya, hasilnya adalah nilai integral terkait dari enum member.

public enum Season
{
    Spring,
    Summer,
    Autumn,
    Winter
}

public class EnumConversionExample
{
    public static void Main()
    {
        Season a = Season.Autumn;
        Console.WriteLine($"Integral value of {a} is {(int)a}");  // output: Integral value of Autumn is 2

        var b = (Season)1;
        Console.WriteLine(b);  // output: Summer

        var c = (Season)4;
        Console.WriteLine(c);  // output: 4
    }
}

Gunakan method Enum.IsDefined untuk menentukan apakah tipe enumerasi berisi enum member dengan nilai terkait tertentu.

Untuk tipe enumerasi apa pun, terdapat masing-masing boxing dan unboxing konversi ke dan dari tipe System.Enum.

Spesifikasi bahasa C#

Untuk informasi selengkapnya, lihat bagian berikut dari spesifikasi bahasa C#:

Lihat juga