Bagaimana saya bisa mendapatkan jumlah item yang didefinisikan dalam enum?
318
Anda bisa menggunakan metode statis Enum.GetNames
yang mengembalikan array yang mewakili nama-nama semua item di enum. Properti panjang array ini sama dengan jumlah item yang didefinisikan dalam enum
var myEnumMemberCount = Enum.GetNames(typeof(MyEnum)).Length;
Pertanyaannya adalah:
Jumlah "item" dapat benar-benar berarti dua hal yang sangat berbeda. Perhatikan contoh berikut.
Berapa jumlah "item" yang didefinisikan
MyEnum
?Apakah jumlah item 5? (
A
,B
,C
,D
,E
)Atau 3? (
1
,2
,3
)Jumlah nama yang didefinisikan dalam
MyEnum
(5) dapat dihitung sebagai berikut.Jumlah nilai yang didefinisikan dalam
MyEnum
(3) dapat dihitung sebagai berikut.sumber
var valuesCount = ((MyEnum[])Enum.GetValues(typeof(MyEnum))).Distinct().Count();
,.Default = 1, A4 = 1, Portrate = 1, A4Portrait = 1, Landscape = 2, A4Landscape = 2, ...
;).Enum.GetValues (typeof (MyEnum)). Panjang;
sumber
Trik bagus yang saya lihat dalam jawaban C untuk pertanyaan ini, cukup tambahkan elemen terakhir ke enum dan gunakan untuk mengetahui berapa banyak elemen dalam enum:
Dalam hal Anda menentukan nilai awal selain 0, Anda bisa menggunakan NumberOfTypes - Type1 untuk memastikan jumlah elemen.
Saya tidak yakin apakah metode ini akan lebih cepat daripada menggunakan Enum, dan saya juga tidak yakin apakah itu akan dianggap cara yang tepat untuk melakukan ini, karena kami memiliki Enum untuk memastikan informasi ini untuk kami.
sumber
Dari jawaban sebelumnya hanya menambahkan contoh kode.
sumber
Anda dapat menggunakan Enum.GetNames untuk mengembalikan nilai-nilai IEnumerable di enum Anda dan kemudian. Menghitung IEnumerable yang dihasilkan.
GetNames menghasilkan banyak hasil yang sama dengan GetValues tetapi lebih cepat.
sumber
Jika Anda menemukan diri Anda menulis solusi di atas sesering yang saya lakukan maka Anda dapat mengimplementasikannya sebagai generik:
sumber
Saya sedang melihat ini sekarang, dan tidak senang dengan keterbacaan solusi saat ini. Jika Anda menulis kode secara informal atau pada proyek kecil, Anda bisa menambahkan item lain ke akhir enum Anda yang disebut "Panjang". Dengan cara ini, Anda hanya perlu mengetik:
Tentu saja jika orang lain akan menggunakan kode Anda - atau saya yakin dalam banyak keadaan lain yang tidak berlaku untuk saya dalam kasus ini - solusi ini mungkin di mana saja dari sakit disarankan untuk mengerikan.
sumber
Untuk Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Length
tidak bekerja dengan saya, tetapi[Enum].GetNames(GetType(Animal_Type)).length
berhasil.sumber