C# Enum(Enumerare) cu Exemplu

โšก Rezumat inteligent

Enumeraศ›iile รฎn C# definesc un set denumit de valori integrale constante, cum ar fi zilele sฤƒptฤƒmรขnii, facilitรขnd citirea ศ™i รฎntreศ›inerea codului. Cuvรขntul cheie enum declarฤƒ aceste constante fixe o singurฤƒ datฤƒ pentru reutilizare รฎn cadrul unui program.

  • ๐Ÿ“ Definiศ›ie: Cuvรขntul cheie enum grupeazฤƒ constante denumite corelate sub un singur tip, รฎnlocuind numerele magice รฎmprฤƒศ™tiate cu identificatori lizibili.
  • ๏ธ Exemplu de zile: O enumerare numitฤƒ Days stocheazฤƒ zilele sฤƒptฤƒmรขnii, iar Days.Sun returneazฤƒ membrul selectat dupฤƒ numele sฤƒu.
  • ๐Ÿ”ข Valori subiacente: Membrii enumerฤƒrii se mapeazฤƒ la valori รฎntregi care รฎncep de la zero ศ™i cresc cu unu, cu excepศ›ia cazului รฎn care sunt atribuite numere personalizate.
  • ๐Ÿ” Conversii: Convertฤƒrile explicite transformฤƒ o enumerare รฎn รฎntregul sฤƒu, รฎn timp ce Enum.Parse ศ™i Enum.TryParse convertesc textul รฎnapoi รฎn membri.
  • ๐Ÿšฉ Steaguri: Atributul Flags permite unei enumerฤƒri sฤƒ combine mai multe opศ›iuni ca ศ™i cรขmpuri de biศ›i folosind operatorul SAU la nivel de bit.
  • ๐Ÿค– Asistenศ›ฤƒ AI: GitHub Copilot ศ™i ML.NET ajutฤƒ la generarea definiศ›iilor enumelor ศ™i la maparea enumelor la funcศ›iile de รฎnvฤƒศ›are automatฤƒ.

C# Enum(Enumerare)

Enumerare C#

O enumerare este folositฤƒ รฎn orice limbaj de programare pentru a defini un set constant de valori. De exemplu, zilele sฤƒptฤƒmรขnii pot fi definite ca o enumerare ศ™i utilizate oriunde รฎn program. รŽn C#, enumerarea este definitฤƒ cu ajutorul cuvรขntului cheie 'enum'.

Sฤƒ vedem un exemplu despre cum putem folosi cuvรขntul cheie โ€ženumโ€.

รŽn exemplul nostru, vom defini o enumerare numitฤƒ zile, care va fi folositฤƒ pentru a stoca zilele sฤƒptฤƒmรขnii. Pentru fiecare exemplu, vom modifica doar funcศ›ia principalฤƒ din fiศ™ierul Program.cs.

Enumerare C#

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 Explicaลฃie:-

  1. โ€ženumโ€ tip de date este specificat pentru a declara o enumerare. Numele enumerarii este Zile. Toate zilele sฤƒptฤƒmรขnii sunt specificate ca valori ale enumeraศ›iei.
  2. รŽn cele din urmฤƒ, funcศ›ia console.write este folositฤƒ pentru a afiศ™a una dintre valorile enumeraศ›iei.

Dacฤƒ codul de mai sus este introdus corect ศ™i programul este executat cu succes, va fi afiศ™atฤƒ urmฤƒtoarea ieศ™ire.

ieศ™ire:

Enumerare C#

Din rezultat, puteศ›i vedea cฤƒ valoarea โ€žSoareโ€ a enumeraศ›iei este afiศ™atฤƒ รฎn consolฤƒ.

De ce sฤƒ folosiศ›i enumeraศ›iile รฎn C#?

Enumeraศ›iile fac un program mai uศ™or de citit, mai sigur ศ™i mai simplu de รฎntreศ›inut. รŽn loc sฤƒ รฎmprฤƒศ™tie numere inexplicabile, uneori numite numere magice, รฎn tot codul, o enumerare dฤƒ fiecฤƒrei valori un nume descriptiv care รฎi exprimฤƒ intenศ›ia.

  • lizibilitate: Un nume precum Days.Fri este mult mai clar decรขt numฤƒrul 5, aศ™a cฤƒ oricine citeศ™te codul รฎnศ›elege imediat semnificaศ›ia.
  • Tip de siguranศ›ฤƒ: O variabilฤƒ declaratฤƒ cu un tip enum poate conศ›ine doar unul dintre membrii definiศ›i, ceea ce previne pierderea valorilor nevalide.ping inch
  • Mentenabilitatea: Constantele corelate se aflฤƒ รฎntr-un singur loc, aศ™adar adฤƒugarea sau redenumirea unei valori actualizeazฤƒ รฎntregul program รฎn mod consecvent.
  • Legarea datelor: Framework-uri precum WPF ศ™i ASP.NET pot lega o enumerare la o listฤƒ derulantฤƒ, ceea ce face ca enumeraศ›iile sฤƒ fie utile pentru construirea de interfeศ›e utilizator.

Deoarece compilatorul verificฤƒ fiecare atribuire รฎn raport cu membrii permiศ™i, enumฤƒrile ajutฤƒ ศ™i la detectarea greศ™elilor din timp, รฎnainte de rularea programului.

Atribuirea de valori personalizate unei enumฤƒri C#

รŽn mod implicit, C# atribuie primului membru al enumerฤƒrii valoarea 0 ศ™i creศ™te fiecare membru urmฤƒtor cu unu. รŽn enumerarea Days de mai sus, Sun este egal cu 0, Mon este egal cu 1 ศ™i Sat este egal cu 6. Puteศ›i suprascrie aceste valori implicite atribuind numere explicite.

  • Valori explicite: Scrierea enum Level {Low = 1, Medium = 5, High = 10} seteazฤƒ fiecฤƒrui membru un numฤƒr ales รฎn loc de secvenศ›a implicitฤƒ.
  • Sarcinฤƒ parศ›ialฤƒ: Dacฤƒ atribuiศ›i o valoare doar anumitor membri, compilatorul continuฤƒ numerotarea de la ultima valoare atribuitฤƒ pentru membrii care urmeazฤƒ.
  • Tipul subiacent: O enumerare รฎศ™i stocheazฤƒ membrii ca int รฎn mod implicit, dar o puteศ›i baza pe byte, short sau long pentru a economisi memorie sau a extinde intervalul.

Valorile personalizate sunt utile atunci cรขnd numerele trebuie sฤƒ corespundฤƒ unui sistem extern, cum ar fi codurile bazei de date sau constantele de protocol, astfel รฎncรขt enumerarea sฤƒ reflecte exact datele reale.

Cum se convertesc enumeraศ›iile C# รฎn int, string ศ™i Flags

C# trebuie frecvent sฤƒ mute o valoare enum รฎntr-o altฤƒ formฤƒ, cum ar fi stocarea ei ca numฤƒr sau citirea ei din text. Aceste conversii au loc รฎn cรขteva moduri standard.

  • De la enumerare la รฎntreg: O conversie explicitฤƒ, cum ar fi (int)Days.Wed, returneazฤƒ numฤƒrul รฎntreg subiacent, ceea ce este util pentru stocare sau aritmeticฤƒ.
  • int cฤƒtre enum: Convertirea รฎn cealaltฤƒ direcศ›ie, de exemplu (Zile)3, transformฤƒ un numฤƒr รฎnapoi รฎn membrul enumerฤƒrii corespondent.
  • ศ˜ir de caractere cฤƒtre enumerare: Enum.Parse ศ™i Enum.TryParse, o metodฤƒ mai sigurฤƒ, convertesc un nume precum โ€žFriโ€ รฎn membrul Days.Fri fฤƒrฤƒ a genera text nevalid.
  • Enumerare cฤƒtre ศ™ir de caractere: Apelarea funcศ›iei ToString pe orice membru returneazฤƒ numele acestuia, astfel รฎncรขt Days.Sun.ToString() produce โ€žSunโ€ pentru afiศ™are sau รฎnregistrare รฎn jurnal.
  • Membrii listei: Enum.GetValues โ€‹โ€‹ศ™i Enum.GetNames returneazฤƒ fiecare valoare sau nume, ceea ce este util la popularea meniurilor sau la validarea datelor de intrare.

Cรขnd o enumerare ar trebui sฤƒ reprezinte o combinaศ›ie de opศ›iuni รฎn loc de una singurฤƒ, aplicaศ›i atributul Flags ศ™i daศ›i fiecฤƒrui membru o putere de doi, cum ar fi 1, 2, 4 ศ™i 8. Apoi, puteศ›i combina membri cu operatorul SAU la nivel de bit ศ™i puteศ›i testa o opศ›iune specificฤƒ cu metoda HasFlag.

Aceste tehnici de conversie permit unei enumฤƒri sฤƒ se miศ™te uศ™or รฎntre nume lizibile, numere stocate ศ™i seturi de steaguri combinate, keeping restul programului este atรขt sigur pentru tipฤƒrire, cรขt ศ™i uศ™or de urmฤƒrit.

รŽntrebฤƒri frecvente

O variabilฤƒ enum are implicit valoarea 0, valoarea mapatฤƒ la membrul respectiv fiind egalฤƒ cu 0. Dacฤƒ niciun membru nu este 0, variabila pฤƒstreazฤƒ รฎn continuare 0, aศ™a cฤƒ dezvoltatorii definesc adesea mai รฎntรขi un membru None sau Unknown pentru a evita confuzia.

O constantฤƒ defineศ™te o valoare denumitฤƒ, รฎn timp ce o enumerare grupeazฤƒ un set corelat de constante denumite sub un singur tip. Enumeraศ›iile adaugฤƒ, de asemenea, siguranศ›ฤƒ de tip, deoarece o variabilฤƒ poate conศ›ine doar unul dintre membrii definiศ›i ai enumerฤƒrii.

Da. O enumerare poate fi declaratฤƒ รฎn interiorul unui spaศ›iu de nume sau imbricatฤƒ รฎntr-o clasฤƒ sau structurฤƒ, ceea ce รฎi limiteazฤƒ domeniul de aplicare la tipul respectiv. Cu toate acestea, C# nu permite ca o enumerare sฤƒ fie declaratฤƒ รฎn interiorul corpului unei metode.

Da. Doi sau mai mulศ›i membri pot avea acelaศ™i numฤƒr subiacent, ceea ce face ca numele ulterioare sฤƒ fie aliasuri ale primului. Comparฤƒrile le trateazฤƒ ca fiind egale, iar conversia acelei valori รฎntr-un ศ™ir de caractere returneazฤƒ numele definit primul รฎn enumerare.

O enumerare este un tip de valoare, deci stocheazฤƒ datele direct, nu ca referinศ›ฤƒ pe heap. Moศ™teneศ™te de la System.Enum, dar se comportฤƒ ca tipul integral de subiacent, ceea ce face ca copierea ศ™i compararea valorilor enumerฤƒrii sฤƒ fie rapide.

Da. รŽn ML.NET puteศ›i mapa o enumerare la o caracteristicฤƒ sau o etichetฤƒ categoricฤƒ, adesea prin convertirea acesteia la valoarea sa รฎntreagฤƒ sau la o codificare cu un singur punct de acces. Enumeraศ›iile puternic tipizate menศ›in coloanele de intrare ale unei conducte de รฎnvฤƒศ›are automatฤƒ clare ศ™i consecvente.

Da. GitHub Copilot sugereazฤƒ definiศ›ii complete ale enum-urilor, valori personalizate, atribute Flags ศ™i instrumente de conversie precum Enum.TryParse รฎn Visual Studio ศ™i VS Code. RevVizualizaศ›i fiecare sugestie, deoarece Copilot poate selecta valori sau nume care nu se potrivesc domeniului dvs.

Foloseศ™te metoda Enum.IsDefined, care returneazฤƒ valoarea โ€žtrueโ€ atunci cรขnd un numฤƒr sau un nume dat se potriveศ™te cu un membru definit. Asocierea acesteia cu Enum.TryParse รฎศ›i permite sฤƒ validezi รฎn siguranศ›ฤƒ datele introduse de utilizator รฎnainte de a converti textul รฎntr-o valoare enum.

Rezumaศ›i aceastฤƒ postare cu: