Dalam C #, apakah mungkin untuk menghias tipe Enum dengan atribut atau melakukan sesuatu yang lain untuk menentukan apa nilai default seharusnya, tanpa harus mengubah nilainya? Angka-angka yang diperlukan mungkin dibuat dengan batu untuk alasan apa pun, dan akan berguna untuk tetap memiliki kontrol atas default.
enum Orientation
{
None = -1,
North = 0,
East = 1,
South = 2,
West = 3
}
Orientation o; // Is 'North' by default.
int
s di abstrak , hanya karena mereka diimplementasikan sebagai tipe numerik. Kita dapat mengimplementasikan enum sebagai string, dan itu tidak akan mengubah kegunaannya. Saya menganggap jawabannya di sini sebagai batasan dari ekspresi bahasa C #; batasannya tentu saja tidak melekat dalam gagasan "membedakan nilai dari himpunan terbatas."enum
s sebagai tipe-tingkat konstruksi, khususnya sebagai tipe penjumlahan (atau lihat di sini . Yaitu, anggap setiap enum sebagai tipe yang berbeda, di mana semua nilai dari tipe itu berbeda dari setiap nilai enum lainnya. Dari pola pikir seperti itu, tidak mungkin bagi enum untuk berbagi nilai apa pun , dan memang, abstraksi ini berantakan ketika Anda menganggap bahwa default dari0
mungkin atau mungkin tidak berlaku untuk enum yang diberikan, dan dengan mudah dimasukkan ke setiap enum.Jawaban:
Default untuk
enum
(pada kenyataannya, semua tipe nilai) adalah 0 - bahkan jika itu bukan nilai yang valid untuk ituenum
. Itu tidak bisa diubah.sumber
Nilai default enum apa pun adalah nol. Jadi jika Anda ingin menetapkan satu enumerator menjadi nilai default, maka setel satu ke nol dan semua enumerator lainnya menjadi non-nol (enumerator pertama yang memiliki nilai nol akan menjadi nilai default untuk enum itu jika ada beberapa enumerator dengan nilai nol).
Jika enumerator Anda tidak memerlukan nilai eksplisit, maka pastikan enumerator pertama adalah yang Anda inginkan sebagai enumerator default karena "Secara default, enumerator pertama memiliki nilai 0, dan nilai setiap enumerator berturut-turut meningkat sebesar 1. " ( Referensi C # )
sumber
Jika nol tidak berfungsi sebagai nilai default yang tepat, Anda dapat menggunakan model komponen untuk menentukan solusi untuk enum:
lalu Anda bisa menelepon:
Catatan: Anda harus menyertakan baris berikut di bagian atas file:
Ini tidak mengubah nilai default bahasa C # sebenarnya dari enum, tetapi memberikan cara untuk menunjukkan (dan mendapatkan) nilai default yang diinginkan.
sumber
else
pernyataan sebagai berikut:return default(TEnum);
. Tinju, itu akan mengurangiEnum.GetValues(...).***
panggilan lebih lambat , kedua (dan lebih penting) itu akan menjadi generik untuk semua jenis, bahkan non-enum. Selain itu, Anda tidak membatasi kode untuk digunakan hanya untuk enum, jadi ini sebenarnya akan memperbaiki potensi pengecualian ketika digunakan di atas jenis non-enum.Default enum adalah enumerasi apa pun yang setara dengan nol. Saya tidak percaya ini bisa diubah dengan atribut atau cara lain.
(MSDN mengatakan: "Nilai default enum E adalah nilai yang dihasilkan oleh ekspresi (E) 0.")
sumber
Anda tidak bisa, tetapi jika Anda mau, Anda bisa melakukan beberapa trik. :)
penggunaan struct ini sebagai enum sederhana.
di mana Anda dapat membuat pa == Orientation.East (atau nilai apa pun yang Anda inginkan) secara default
untuk menggunakan trik itu sendiri, Anda perlu mengonversi dari int dengan kode.
disana implementasinya:
sumber
value + 1
, jika tidak, sekarangdefault(Orientation)
pengembalian AndaEast
. Juga, jadikan konstruktor sebagai pribadi. Pendekatan yang bagus.Satu lagi cara yang mungkin bisa membantu - menggunakan semacam "alias". Sebagai contoh:
sumber
Status s = default(Status);
tidak akan menjadi anggota status, karenas
akan memiliki nilai(Staus) 0
. Yang terakhir ini valid untuk menulis secara langsung, karena enum dapat dilemparkan ke bilangan bulat, tetapi akan gagal selama deserialisasi, karena kerangka kerja memastikan bahwa enum selalu deserialized ke anggota yang valid. Kode Anda akan benar-benar valid jika Anda mengubah barisNew = 10
keNew = 0
.Sebenarnya
enum
default adalah elemen pertamaenum
yang nilainya0
.Jadi misalnya:
sumber
Console.WriteLine(Animals.Pony);
mencetak "Cat")The default value of enum is the enummember equal to 0 or the first element(if value is not specified)
... Tetapi saya telah menghadapi masalah kritis menggunakan enum dalam proyek saya dan mengatasinya dengan melakukan sesuatu di bawah ... Bagaimana pun kebutuhan saya terkait dengan tingkat kelas ...dan dapatkan hasil yang diharapkan
Sekarang bagaimana jika nilai berasal dari DB .... Ok dalam skenario ini ... berikan nilai dalam fungsi di bawah ini dan itu akan mengubah nilai menjadi enum ... fungsi di bawah ini menangani berbagai skenario dan bersifat umum ... dan percayalah itu sangat cepat ..... :)
sumber
Nilai default untuk jenis enumerasi adalah 0:
" Secara default, enumerator pertama memiliki nilai 0, dan nilai masing-masing enumerator berturut-turut dinaikkan sebesar 1. "
" Tipe nilai enum memiliki nilai yang dihasilkan oleh ekspresi (E) 0, di mana E adalah pengidentifikasi enum. "
Anda dapat memeriksa dokumentasi untuk C # enum di sini , dan dokumentasi untuk tabel nilai default C # di sini .
sumber
Jika Anda mendefinisikan enum Default sebagai enum dengan nilai terkecil Anda dapat menggunakan ini:
Ini tidak menganggap bahwa enum memiliki nilai nol.
sumber
Default adalah yang pertama dalam definisi. Sebagai contoh:
Ini akan kembali
His
sumber
Jika Anda mengatur properti ke nol akan mengembalikan Orientations. Tidak ada pada get. Orientasi properti adalah null secara default.
sumber
Kemudian dalam kode bisa Anda gunakan
sumber