Bagaimana saya bisa mendapatkan jumlah item yang didefinisikan dalam enum?
Bagaimana saya bisa mendapatkan jumlah item yang didefinisikan dalam enum?
Jawaban:
Anda bisa menggunakan metode statis Enum.GetNamesyang 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:
Bagaimana saya bisa mendapatkan jumlah item yang didefinisikan dalam enum?
Jumlah "item" dapat benar-benar berarti dua hal yang sangat berbeda. Perhatikan contoh berikut.
enum MyEnum
{
A = 1,
B = 2,
C = 1,
D = 3,
E = 2
}
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.
var namesCount = Enum.GetNames(typeof(MyEnum)).Length;
Jumlah nilai yang didefinisikan dalam MyEnum(3) dapat dihitung sebagai berikut.
var valuesCount = Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>().Distinct().Count();
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;
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:
enum MyType {
Type1,
Type2,
Type3,
NumberOfTypes
}
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.
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.
Jika Anda menemukan diri Anda menulis solusi di atas sesering yang saya lakukan maka Anda dapat mengimplementasikannya sebagai generik:
public static int GetEnumEntries<T>() where T : struct, IConvertible
{
if (!typeof(T).IsEnum)
throw new ArgumentException("T must be an enumerated type");
return Enum.GetNames(typeof(T)).Length;
}
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:
var namesCount = (int)MyEnum.Length;
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.
Untuk Visual Basic:
[Enum].GetNames(typeof(MyEnum)).Lengthtidak bekerja dengan saya, tetapi
[Enum].GetNames(GetType(Animal_Type)).lengthberhasil.