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:
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:
Dikirim
2
TrueMari kita bedah baris demi baris:
public enum StatusPesanan { ... }: deklarasi enum membuat tipe baru berisi konstanta bernama; anggota pertama bernilai0dan anggota berikutnya melanjutkan1, 2, 3.StatusPesanan status = StatusPesanan.Dikirim;: anggota enum diakses lewat nama tipenya, sehingga maksud kode terbaca tanpa perlu menghafal angka.Console.WriteLine(status):WriteLinemencetak nama anggota, yaituDikirim, bukan angkanya.(int)status: cast eksplisit mengambil angka di balik nama;Dikirimbernilai2.Enum.Parse<StatusPesanan>("Selesai"): method ini mengubah teks menjadi anggota enum yang sesuai; perbandingannya denganStatusPesanan.SelesaimenghasilkanTrue.
Menelusuri Semua Anggota #
Method generik Enum.GetValues<T> mengembalikan seluruh anggota enum dalam urutan deklarasinya. Contoh berikut mencetak enum Hari beserta angka di baliknya:
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:
0: Senin
1: Selasa
2: Rabu
3: Kamis
4: Jumat
5: Sabtu
6: MingguPola 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:
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:
Dalam perjalananPola 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.