Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju. Čitaj više.

Enumi su korisna vrsta podataka koja vam omogućuje definiranje popisa imenovanih opcija za varijablu. Na primjer, ako želite pohraniti svaki dan u tjednu, možete koristiti enum za predstavljanje valjanih vrijednosti.

Enumi čine vaš kod lakšim za čitanje i pisanje potičući smislena imena i ograničavajući vrijednosti koje možete koristiti. Često je zgodno koristiti naredbu switch za rukovanje mogućim vrijednostima enuma.

Enume možete deklarirati i koristiti u mnogim programskim jezicima, uključujući C#.

Kako deklarirati enum u C#

U C# ćete enume obično dekalirati na razini imenskog prostora. Na primjer, u C# konzolnoj aplikaciji, svoje enume možete deklarirati kao svojstva klase. Ovdje možete vidjeti primjer GitHub repo.

razredaProgram
{
nabrajanje radni dan {
Ponedjeljak,
Utorak,
Srijeda,
Četvrtak,
Petak,
Subota,
nedjelja
}

statičkiponištitiGlavni(niz[] args)
{

}
}

instagram viewer

Kada deklarirate enum, svaka opcija dobiva cjelobrojnu vrijednost koja predstavlja njezin indeks. Prema zadanim postavkama, prva vrijednost u enumu ima vrijednost indeksa 0. Da biste to promijenili, možete navesti vlastiti indeks za prvi element kada deklarirate enum:

nabrajanje radni dan { 
ponedjeljak = 1,
Utorak,
Srijeda,
Četvrtak,
Petak,
Subota,
nedjelja
}

U ovom slučaju, indeks prvog elementa ponedjeljak počinje u 1. Indeks sljedećeg elementa utorak bit će 2, i tako dalje.

Kako pristupiti enum vrijednosti u C#

Postoji mnogo različitih načina na koje možete pristupiti vrijednostima pohranjenim unutar enuma. Vrijednost vraćena za svaku opciju u enumu je indeks. Za ovaj primjer, vrijednost radni dan. petak je 5.

Jedan od načina na koji možete dohvatiti naziv enuma je korištenjem Nabrajanja. GetName() funkcija. Ovo dobiva naziv opcije na indeksu 5:

niz petak = Enum. GetName(vrsta(radni dan), radni dan. Petak);
Konzola. WriteLine("Hvala Bogu da je" + petak + "!");
// Izlaz = Hvala Bogu da je petak!

Također možete pristupiti vrijednosti koristeći njezin indeks. U ovom slučaju, vrijednost na indeksu 2 u Weekday enum (što je utorak) bit će pohranjena u varijabli:

radni dan utorak = (radni dan)2;
Konzola. WriteLine("Danas je " + utorak);
// Izlaz = Danas je utorak

Kada proslijedite enum kao argument u Konzola. WriteLine(), the toString() metoda za enum pokreće se automatski. To znači da umjesto ispisa prave numeričke vrijednosti enuma, koja je 5, ispisat će vrijednost niza, petak.

Konzola. WriteLine (radni dan. četvrtak + "je novo" + radni dan. Petak);
// Izlaz = četvrtak je novi petak

Također možete pretvoriti ili analizirati tip podataka u cijeli broj kao još jedan način za pohranjivanje indeksa opcije:

int ponedjeljakIndex = (int)Radni dan. Ponedjeljak;
Konzola. WriteLine (ponedjeljakIndex);
// Izlaz = 1

Kako usporediti enume u C#

U C# možete usporediti enume koristeći operatore usporedbe (==, !=, , <=, >=). Time će se usporediti brojčana vrijednost opcija.

Weekday day1 = radni dan. Ponedjeljak;
Weekday day2 = Dan u tjednu. Utorak;

ako (dan1 == dan2)
{
Konzola. WriteLine(– Dani su isti.);
}
drugo
{
Konzola. WriteLine(– Dani su drugačiji.);
}

U ovom primjeru, vrijednost dana u tjednu. Ponedjeljak je 1, a vrijednost dana u tjednu. Utorak je 2, dakle 1 == 2 usporedba neće uspjeti.

Drugi način usporedbe enuma je Jednako() metoda:

ako (dan1.Jednako (dan2))
{
Konzola. WriteLine(– Dani su isti.);
}
drugo
{
Konzola. WriteLine(– Dani su drugačiji.);
}

Također možete koristite C# naredbu switch za usporedbu vrijednosti sa svakom opcijom u enumu. U ovom primjeru, kod će pasti u slučaj srijede:

Weekday valueToCompare = Dan u tjednu. Srijeda;

sklopka (valueToCompare)
{
slučaj radni dan. Ponedjeljak:
Konzola. WriteLine("Trebam kavu.");
pauza;
slučaj radni dan. Utorak:
Konzola. WriteLine("Trebam kavu.");
pauza;
slučaj radni dan. Srijeda:
Konzola. WriteLine("Trebam kavu.");
pauza;
slučaj radni dan. Četvrtak:
Konzola. WriteLine("Četvrtak je novi petak!");
pauza;
slučaj radni dan. Petak:
Konzola. WriteLine("Hvala Bogu da je petak!");
pauza;
slučaj radni dan. Subota:
Konzola. WriteLine("Moj najdraži dan!");
pauza;
slučaj radni dan. Nedjelja:
Konzola. WriteLine("Moj drugi najdraži dan!");
pauza;
zadano:
Konzola. WriteLine("Nevažeći dan u tjednu.");
pauza;
}

Kako ponavljati preko enuma u C#

Možete iterirati preko enuma u C# koristeći Enum. GetValues() metoda, koja vraća niz svih vrijednosti u enum. Ovaj isječak koda ispisuje se svaki dan u tjednu, uključujući ponedjeljak, utorak i tako dalje:

za svakoga (Radni dan u Enum. GetValues(vrsta(Radni dan)))
{
Konzola. WriteLine((int)dan); // Za ispis indeksa
Konzola. WriteLine (dan); // Za ispis tekstualne vrijednosti
}

Također možete iterirati preko enum vrijednosti koristeći Enum. GetNames() metoda. Vraća popis vrijednosti niza za predstavljanje imena za enum opcije:

za svakoga (niz Ime u Enum. GetNames(vrsta(Radni dan)))
{
int indeks = (int)(Radni dan) Enum. Raščlanjivanje (vrsta(dan u tjednu), ime);

Konzola. WriteLine (indeks); // Za ispis indeksa
Konzola. WriteLine (ime); // Za ispis tekstualne vrijednosti
}

Korištenje enuma u C#

Možete koristiti enume u svom kodu kako biste ga učinili čitljivijim i manje sklonim greškama. Enumi također mogu biti vrlo korisni kada su upareni s drugim strukturama, kao što su rječnici.