C# Enum(Enumeracija) s primjerom

⚡ Pametni sažetak

Nabrajanja u C# definiraju imenovani skup konstantnih integralnih vrijednosti, kao što su dani u tjednu, što olakšava čitanje i održavanje koda. Ključna riječ enum deklarira ove fiksne konstante jednom za ponovnu upotrebu u programu.

  • 📐 Definicija: Ključna riječ enum grupira povezane imenovane konstante pod jednim tipom, zamjenjujući raspršene magične brojeve čitljivim identifikatorima.
  • ️ Primjer dana: Nabrajanje pod nazivom Days pohranjuje dane u tjednu, a Days.Sun vraća odabrani član po njegovom imenu.
  • 🔢 Temeljne vrijednosti: Članovi nabrajanja preslikavaju se u cjelobrojne vrijednosti koje počinju od nule i povećavaju se za jedan, osim ako nisu dodijeljeni prilagođeni brojevi.
  • 🔁 pretvorbe: Eksplicitni pretvarači pretvaraju enum u cijeli broj, dok Enum.Parse i Enum.TryParse pretvaraju tekst natrag u članove.
  • 🚩 zastave: Atribut Flags omogućuje jednom nabrajanju kombiniranje nekoliko opcija kao bitnih polja pomoću bitnog ILI operatora.
  • 🤖 AI pomoć: GitHub Copilot i ML.NET pomažu u generiranju definicija nabrajanja i mapiranju nabrajanja na značajke strojnog učenja.

C# Enum(Nabrajanje)

C# nabrajanje

Nabrajanje se koristi u bilo kojem programskom jeziku za definiranje konstantnog skupa vrijednosti. Na primjer, dani u tjednu mogu se definirati kao nabrajanje i koristiti bilo gdje u programu. U C#, enumeracija je definirana uz pomoć ključne riječi 'enum'.

Pogledajmo primjer kako možemo koristiti ključnu riječ 'enum'.

U našem primjeru definirat ćemo enumeraciju pod nazivom dani, koja će se koristiti za pohranjivanje dana u tjednu. Za svaki primjer, izmijenit ćemo samo glavnu funkciju u našoj datoteci Program.cs.

C# nabrajanje

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code Obrazloženje:-

  1. "enum" tip podataka naveden je za deklariranje enumeracije. Naziv enumeracije je Dani. Svi dani u tjednu navedeni su kao vrijednosti nabrajanja.
  2. Konačno, funkcija console.write koristi se za prikaz jedne od vrijednosti enumeracije.

Ako se gornji kod ispravno unese i program se uspješno izvede, prikazat će se sljedeći izlaz.

Izlaz:

C# nabrajanje

Iz izlaza možete vidjeti da je vrijednost 'Sun' enumeracije prikazana na konzoli.

Zašto koristiti nabrajanja u C#?

Nabrajanje čini program lakšim za čitanje, sigurnijim i jednostavnijim za održavanje. Umjesto raspršivanja neobjašnjivih brojeva, ponekad nazvanih magičnim brojevima, po kodu, nabrajanje svakoj vrijednosti daje opisno ime koje navodi njezinu namjeru.

  • Čitljivost: Naziv poput Days.Fri je daleko jasniji od broja 5, tako da svatko tko čita kod odmah razumije značenje.
  • Sigurnost tipa: Varijabla deklarirana s tipom nabrajanja može sadržavati samo jedan od definiranih članova, što sprječava ispadanje nevažećih vrijednosti.ping u.
  • Mogućnost održavanja: Povezane konstante nalaze se na jednom mjestu, pa dodavanje ili preimenovanje vrijednosti dosljedno ažurira cijeli program.
  • Povezivanje podataka: Okviri poput WPF-a i ASP.NET-a mogu vezati enum s padajućim popisom, što enum-e čini korisnima za izgradnju korisničkih sučelja.

Budući da kompajler provjerava svaku dodjelu u odnosu na dopuštene članove, nabrajanja također pomažu u ranom otkrivanju pogrešaka, prije nego što se program pokrene.

Dodjeljivanje prilagođenih vrijednosti C# nabrojanom elementu

Prema zadanim postavkama, C# prvom članu nabrajanja dodjeljuje vrijednost 0 i povećava svaki sljedeći član za jedan. U gornjem nabrajanju Days, Sun je jednako 0, Mon je jednako 1, a Sat je jednako 6. Ove zadane vrijednosti možete poništiti dodjeljivanjem eksplicitnih brojeva.

  • Eksplicitne vrijednosti: Zapisivanjem enum Level {Low = 1, Medium = 5, High = 10} svaki član se postavlja na odabrani broj umjesto zadanog niza.
  • Djelomični zadatak: Ako dodijelite vrijednost samo nekim članovima, kompajler nastavlja numeriranje od posljednje dodijeljene vrijednosti za članove koji slijede.
  • Vrsta temeljnog instrumenta: Enum po zadanim postavkama pohranjuje svoje članove kao cijeli broj, ali možete ga temeljiti na bajtovima, kratkim brojevima ili dugim brojevima kako biste uštedjeli memoriju ili proširili raspon.

Prilagođene vrijednosti su korisne kada se brojevi moraju podudarati s vanjskim sustavom, kao što su kodovi baze podataka ili konstante protokola, tako da nabrajanje točno odražava stvarne podatke.

Kako pretvoriti C# nabrajanja u int, string i flag-ove

C# često treba premjestiti vrijednost nabrajanja u drugi oblik, poput pohranjivanja kao broja ili čitanja iz teksta. Ove se pretvorbe događaju na nekoliko standardnih načina.

  • Nabrajanje u cijeli broj: Eksplicitni cast kao što je (int)Days.Wed vraća temeljni cijeli broj, što je korisno za pohranu ili aritmetiku.
  • int u nabrajanje: Pretvaranje u drugom smjeru, na primjer (Dani)3, vraća broj natrag u odgovarajući član nabrajanja.
  • Niz za nabrajanje: Enum.Parse i sigurniji Enum.TryParse pretvaraju naziv poput "Fri" u član Days.Fri bez vraćanja nevažećeg teksta.
  • Nabrajanje u niz: Pozivanje ToStringa na bilo kojem članu vraća njegovo ime, pa Days.Sun.ToString() proizvodi „Sun“ za prikaz ili zapisivanje u dnevnik.
  • Članovi popisa: Enum.GetValues ​​i Enum.GetNames vraćaju svaku vrijednost ili naziv, što pomaže pri popunjavanju izbornika ili provjeri unosa.

Kada nabrajanje treba predstavljati kombinaciju izbora, a ne jedan, primijenite atribut Flags i svakom članu dajte potenciju broja dva, kao što su 1, 2, 4 i 8. Zatim možete kombinirati članove bitnim operatorom OR i testirati određenu opciju metodom HasFlag.

Ove tehnike pretvorbe omogućuju nabrajanju čisto kretanje između čitljivih imena, pohranjenih brojeva i kombiniranih skupova zastavica, očuvajućiping ostatak programa je siguran za tip i jednostavan za praćenje.

Pitanja i odgovori

Varijabla tipa enum prema zadanim postavkama ima vrijednost 0, a vrijednost mapirana na bilo koji član jednaka je 0. Ako nijedan član nije 0, varijabla i dalje sadrži 0, pa programeri često prvo definiraju člana tipa None ili Unknown kako bi izbjegli zabunu.

Konstanta definira jednu imenovanu vrijednost, dok nabrajanje grupira povezani skup imenovanih konstanti pod jednim tipom. Nabrajanja također dodaju sigurnost tipa, jer varijabla može sadržavati samo jedan od definiranih članova nabrajanja.

Da. Nabrajanje se može deklarirati unutar imenskog prostora ili ugniježditi unutar klase ili strukture, što ograničava njegov opseg na taj tip. Međutim, C# ne dopušta deklariranje nabrajanja unutar tijela metode.

Da. Dva ili više članova mogu dijeliti isti temeljni broj, što kasnije nazive čini pseudonimima prvog. Usporedbe ih tretiraju kao jednake, a pretvaranje te vrijednosti u niz vraća naziv definiran prvi u nabrajanju.

Enum je vrijednosni tip, pa svoje podatke pohranjuje izravno, a ne kao referencu na hrpi. Nasljeđuje System.Enum, ali se ponaša kao integralni tip ispod, što omogućuje brzo kopiranje i uspoređivanje vrijednosti enuma.

Da. U ML.NET-u možete mapirati nabrajanje na kategoričku značajku ili oznaku, često pretvaranjem u cjelobrojnu vrijednost ili jednokratno kodiranje. Strogo tipizirane nabrajanja održavaju ulazne stupce cjevovoda strojnog učenja jasnima i konzistentnima.

Da. GitHub Copilot predlaže potpune definicije nabrajanja, prilagođene vrijednosti, atribute Flags i pomoćnike za pretvorbu kao što je Enum.TryParse unutar Visual Studija i VS Code. Revpregledajte svaki prijedlog, budući da Copilot može odabrati vrijednosti ili nazive koji ne odgovaraju vašoj domeni.

Koristite metodu Enum.IsDefined koja vraća vrijednost true kada se zadani broj ili naziv podudara s definiranim članom. Uparivanje s metodom Enum.TryParse omogućuje vam sigurnu validaciju korisničkog unosa prije pretvaranja teksta u vrijednost nabrajanja.

Sažmite ovu objavu uz: