Variabel enum, ada yang tahu jika selalu default ke elemen pertama?
Variabel enum, ada yang tahu jika selalu default ke elemen pertama?
Jawaban:
Ini adalah anggota enumerasi yang mewakili nilai 0. Secara khusus, dari dokumentasi :
Nilai default suatu
enum Eadalah nilai yang dihasilkan oleh ekspresi(E)0.
Sebagai contoh, ambil enum berikut:
enum E
{
Foo, Bar, Baz, Quux
}
Tanpa mengesampingkan nilai default, pencetakan akan default(E)kembali Fookarena merupakan elemen pertama yang muncul.
Namun, tidak selalu demikian bahwa 0enum diwakili oleh anggota pertama. Misalnya, jika Anda melakukan ini:
enum F
{
// Give each element a custom value
Foo = 1, Bar = 2, Baz = 3, Quux = 0
}
Pencetakan default(F)akan memberi Anda Quux, bukan Foo.
Jika tidak ada elemen dalam enum yang Gbersesuaian dengan 0:
enum G
{
Foo = 1, Bar = 2, Baz = 3, Quux = 4
}
default(G)mengembalikan secara harfiah 0, meskipun jenisnya tetap seperti G(seperti dikutip oleh dokumen di atas, pemeran untuk jenis enum yang diberikan).
'\0'atau default(char), yang sangat tidak mungkin karena default(char)adalah karakter NUL yang sesuai dengan kode char 0.
DefaultValueatribut - sesuatu seperti - System.ComponentModel.DefaultValue(MyEnum.Blah)akan mengubah perilaku default(MyEnum)tetapi masih menghasilkan 0. Apakah tidak ada cara untuk membuat abstraksi untuk enumsekitar nilai defaultnya?
Saya pikir cukup berbahaya untuk mengandalkan urutan nilai-nilai dalam enum dan mengasumsikan bahwa yang pertama selalu default. Ini akan menjadi praktik yang baik jika Anda khawatir tentang melindungi nilai default.
enum E
{
Foo = 0, Bar, Baz, Quux
}
Jika tidak, yang diperlukan hanyalah refactor yang ceroboh dari pesanan dan Anda memiliki standar yang sama sekali berbeda.
Foosetelah Barkeduanya Foodan Barakan memiliki nilai 0 dan E.Foo == E.Barakan kembali true. Ini sangat bodoh dan berlawanan dengan intuisi tapi itu benar :(