Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Petunjuk / Saran
Baru mengembangkan perangkat lunak? Mulai dengan tutorial Memulai terlebih dahulu. Anda akan menemukan enum setelah Anda perlu mewakili serangkaian pilihan tetap dalam kode Anda.
Berpengalaman dalam bahasa lain? Enum C# berfungsi mirip dengan enum di Java atau C++, dengan dukungan tambahan untuk bendera bit dan pencocokan pola. Tinjau sekilas flag dan bagian ekspresi switch untuk menemukan pola C#-spesifik.
Jenis enumerasi (atau enum) mendefinisikan sekumpulan konstanta bernama yang didukung oleh nilai bilangan bulat. Gunakan enum saat nilai harus merupakan salah satu dari sekumpulan opsi tetap—hari dalam seminggu, kode status HTTP, tingkat log, atau petunjuk arah. Enum membuat kode Anda lebih mudah dibaca dan kurang rawan kesalahan daripada konstanta bilangan bulat mentah karena kompilator memberlakukan nilai bernama.
Mendeklarasikan enum
Tentukan enum dengan enum kata kunci diikuti dengan nama jenis dan anggotanya:
enum Season
{
Spring,
Summer,
Autumn,
Winter
}
Secara default, jenis yang mendasar adalah int, dan nilai dimulai dari 0 dan bertambah satu per satu.
Season.Spring adalah 0, Season.Summer adalah 1, dan sebagainya.
Tentukan jenis yang mendasar dan nilai eksplisit
Anda dapat memilih jenis integral yang berbeda dan menetapkan nilai eksplisit untuk mengontrol representasi numerik:
enum HttpStatus : ushort
{
OK = 200,
NotFound = 404,
InternalServerError = 500
}
Gunakan nilai eksplisit saat angka memiliki arti eksternal, seperti kode status HTTP atau pengidentifikasi protokol. Jenis yang mendasar dapat berupa jenis integral apa pun kecuali char. Gunakan byte, , shortushort, int, uint, long, atau ulong.
Menggunakan enum dalam ekspresi pengalihan
Enum bekerja secara alami dengan switch ekspresi dan pencocokan pola. Pengompilasi memperingatkan Anda jika Anda tidak menangani semua anggota, yang membantu mencegah bug saat Anda menambahkan nilai baru nanti:
static string DescribeSeason(Season season) => season switch
{
Season.Spring => "Flowers bloom and temperatures rise.",
Season.Summer => "Long days and warm weather.",
Season.Autumn => "Leaves change color and fall.",
Season.Winter => "Short days and cold temperatures.",
_ => throw new ArgumentOutOfRangeException(nameof(season))
};
var today = Season.Autumn;
Console.WriteLine(DescribeSeason(today));
Pola buang (_) menangani nilai apa pun yang tidak tercantum secara eksplisit.
Pencocokan pola adalah fitur C# yang menguji nilai terhadap bentuk atau kondisi. Dalam contoh ini, setiap case memeriksa apakah enum cocok dengan anggota tertentu. Ekspresi switch adalah salah satu dari berbagai bentuk pencocokan pola. Untuk informasi selengkapnya tentang pencocokan pola, lihat Pencocokan pola.
Penanda bit
Ketika enum mewakili kombinasi pilihan daripada satu pilihan, definisikan setiap anggota sebagai pangkat dua dan terapkan FlagsAttribute:
[Flags]
enum FileAccess
{
None = 0,
Read = 1,
Write = 2,
Execute = 4,
ReadWrite = Read | Write,
All = Read | Write | Execute
}
Gabungkan nilai dengan menggunakan | operator dan uji bendera individual dengan menggunakan HasFlag:
var permissions = FileAccess.Read | FileAccess.Write;
Console.WriteLine(permissions); // ReadWrite
Console.WriteLine(permissions.HasFlag(FileAccess.Read)); // True
Console.WriteLine(permissions.HasFlag(FileAccess.Execute)); // False
Atribut ini [Flags] juga mempengaruhi ToString(). Ini menampilkan nilai gabungan sebagai nama yang dipisahkan koma (seperti Read, Write) alih-alih angka mentah. Untuk informasi selengkapnya, lihat System.FlagsAttribute .
Mengonversi antara enum dan bilangan bulat
Pemeran eksplisit mengonversi antara enum dan tipe bilangan bulat dasarnya.
var status = HttpStatus.NotFound;
ushort code = (ushort)status;
Console.WriteLine($"Status: {status} ({code})"); // Status: NotFound (404)
var fromCode = (HttpStatus)200;
Console.WriteLine(fromCode); // OK
Ketahuilah bahwa mentransmisikan bilangan bulat ke enum tidak memvalidasi apakah nilai cocok dengan anggota yang ditentukan. Gunakan Enum.IsDefined untuk memeriksa validitas saat Anda menerima input numerik dari sumber eksternal.
Mengurai string dan mengiterasi nilai
Kelas Enum dasar menyediakan metode untuk mengurai string dan melakukan iterasi atas semua nilai yang ditentukan:
// Parse a string to an enum value:
var parsed = Enum.Parse<Season>("Winter");
Console.WriteLine(parsed); // Winter
// Try to parse safely. It returns false only when the input can't be parsed. Call Enum.IsDefined to validate named members:
if (Enum.TryParse<Season>("Monsoon", out var unknown))
{
Console.WriteLine(unknown);
}
else
{
Console.WriteLine("'Monsoon' is not a valid Season"); // 'Monsoon' is not a valid Season
}
// Iterate over all values in an enum:
foreach (var season in Enum.GetValues<Season>())
{
Console.WriteLine($"{season} = {(int)season}");
}
// Spring = 0
// Summer = 1
// Autumn = 2
// Winter = 3
Gunakan Enum.TryParse<TEnum>(String, Boolean, TEnum) alih-alih Enum.Parse<TEnum>(String) ketika input mungkin tidak valid. Ini mengembalikan false bukannya melemparkan pengecualian.