Banyak program menyimpan keadaan dalam bentuk angka: 0 berarti pesanan baru, 1 berarti sudah dibayar, dan seterusnya. Angka tanpa nama mudah salah ketik dan memaksa pembaca kode menebak maknanya. Enum menyelesaikan masalah tersebut dengan memberi nama pada sekumpulan konstanta yang saling terkait, sehingga program bekerja dengan nama yang bermakna dan compiler tetap memeriksa tipenya.

Mendefinisikan dan Memakai Enum #

Contoh berikut mendefinisikan enum StatusPesanan, lalu memakai anggotanya beserta angka di baliknya:

csharp
public enum StatusPesanan { Baru, Dibayar, Dikirim, Selesai }

StatusPesanan status = StatusPesanan.Dikirim;

Console.WriteLine(status);
Console.WriteLine((int)status);

StatusPesanan dariTeks = Enum.Parse<StatusPesanan>("Selesai");
Console.WriteLine(dariTeks == StatusPesanan.Selesai);

Output yang Dihasilkan:

text
Dikirim
2
True

Mari kita bedah baris demi baris:

  1. public enum StatusPesanan { ... }: deklarasi enum membuat tipe baru berisi konstanta bernama; anggota pertama bernilai 0 dan anggota berikutnya melanjutkan 1, 2, 3.
  2. StatusPesanan status = StatusPesanan.Dikirim;: anggota enum diakses lewat nama tipenya, sehingga maksud kode terbaca tanpa perlu menghafal angka.
  3. Console.WriteLine(status): WriteLine mencetak nama anggota, yaitu Dikirim, bukan angkanya.
  4. (int)status: cast eksplisit mengambil angka di balik nama; Dikirim bernilai 2.
  5. Enum.Parse<StatusPesanan>("Selesai"): method ini mengubah teks menjadi anggota enum yang sesuai; perbandingannya dengan StatusPesanan.Selesai menghasilkan True.

Menelusuri Semua Anggota #

Method generik Enum.GetValues<T> mengembalikan seluruh anggota enum dalam urutan deklarasinya. Contoh berikut mencetak enum Hari beserta angka di baliknya:

csharp
public enum Hari { Senin, Selasa, Rabu, Kamis, Jumat, Sabtu, Minggu }

foreach (Hari hari in Enum.GetValues<Hari>())
{
    Console.WriteLine($"{(int)hari}: {hari}");
}

Output yang Dihasilkan:

text
0: Senin
1: Selasa
2: Rabu
3: Kamis
4: Jumat
5: Sabtu
6: Minggu

Pola ini berguna untuk mengisi daftar pilihan, misalnya menu pilihan hari pada aplikasi konsol.

Enum Bersama Switch Expression #

Kombinasi enum dan switch expression mengubah setiap anggota menjadi teks yang bermakna. Karena compiler mengetahui seluruh anggota enum, compiler dapat memperingatkan kita bila ada anggota yang belum ditangani:

csharp
StatusPesanan status = StatusPesanan.Dikirim;

string keterangan = status switch
{
    StatusPesanan.Baru => "Menunggu pembayaran",
    StatusPesanan.Dibayar => "Siap dikirim",
    StatusPesanan.Dikirim => "Dalam perjalanan",
    StatusPesanan.Selesai => "Transaksi tuntas",
    _ => "Status tak dikenal"
};

Console.WriteLine(keterangan);

Output yang Dihasilkan:

text
Dalam perjalanan

Pola switch di atas memetakan StatusPesanan.Dikirim ke teks Dalam perjalanan. Pola _ menampung anggota yang tidak disebut, termasuk angka hasil cast yang tidak punya nama, sehingga ekspresi selalu menghasilkan teks tanpa melempar exception. Penanganan lengkap setiap anggota enum pada switch expression menjadi alasan kuat memilih enum daripada angka telanjang.