C# Enum(Enumeration) esimerkin kanssa

⚡ Älykäs yhteenveto

C#:n luetteloinnit määrittelevät nimetyn joukon vakiointegraaliarvoja, kuten viikonpäivät, mikä helpottaa koodin lukemista ja ylläpitoa. Avainsana enum määrittää nämä kiinteät vakiot kerran uudelleenkäytettäväksi koko ohjelmassa.

  • 📐 Määritelmä: Avainsana enum ryhmittelee nimetyt vakiot yhden tyypin alle korvaten hajanaiset taikaluvut luettavilla tunnisteilla.
  • Päivän esimerkki: Luettelointi nimeltä Days tallentaa viikonpäivät, ja Days.Sun palauttaa valitun jäsenen sen nimen perusteella.
  • 🔢 Perusarvot: Enum-jäsenet vastaavat kokonaislukuarvoja, jotka alkavat nollasta ja kasvavat yhdellä, ellei mukautettuja numeroita ole määritetty.
  • 🔁 muunnokset: Eksplisiittiset muunnokset muuttavat enumin kokonaisluvuksi, kun taas Enum.Parse ja Enum.TryParse muuntavat tekstin takaisin jäseniksi.
  • 🚩 Liput: Flags-attribuutti antaa yhden enum-arvon yhdistää useita vaihtoehtoja bittikentiksi käyttämällä bittikohtaista TAI-operaattoria.
  • 🤖 AI-apu: GitHub Copilot ja ML.NET auttavat luomaan enum-määritelmiä ja yhdistämään enumit koneoppimisominaisuuksiin.

C# Enum(Luettelointi)

C# luettelointi

Luetteloa käytetään missä tahansa ohjelmointikielessä määrittämään vakio arvojen joukko. Esimerkiksi viikonpäivät voidaan määritellä luetteloiksi ja käyttää kaikkialla ohjelmassa. C#:ssa luettelointi määritellään avainsanan 'enum' avulla.

Katsotaanpa esimerkkiä enum-avainsanan käytöstä.

Esimerkissämme määritämme luettelon nimeltä päivät, jota käytetään tallentamaan viikonpäivät. Jokaisessa esimerkissä muokkaamme vain Program.cs-tiedostomme päätoimintoa.

C# luettelointi

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 Selitys:-

  1. "enum" tietotyyppi on määritetty ilmoittamaan luettelo. Luettelon nimi on Days. Kaikki viikonpäivät on määritetty luettelon arvoiksi.
  2. Lopuksi console.write-funktiota käytetään näyttämään yksi luettelon arvoista.

Jos yllä oleva koodi on syötetty oikein ja ohjelma suoritetaan onnistuneesti, seuraava tulos näytetään.

lähtö:

C# luettelointi

Tulosteesta näet, että konsolissa näkyy luettelon 'Aurinko'-arvo.

Miksi käyttää Enum-arvoja C#:ssa?

Enumit tekevät ohjelmasta helpommin luettavan, turvallisemman ja yksinkertaisemman ylläpitää. Sen sijaan, että selittämättömiä lukuja, joita joskus kutsutaan taikaluvuiksi, sirotellaan koko koodiin, luettelo antaa jokaiselle arvolle kuvaavan nimen, joka ilmaisee sen tarkoituksen.

  • luettavuus: Nimi, kuten Days.Fri, on paljon selkeämpi kuin numero 5, joten kuka tahansa koodin lukeva ymmärtää sen merkityksen välittömästi.
  • Tyyppiturvallisuus: Enum-tyypillä ilmoitettu muuttuja voi sisältää vain yhden määritellyistä jäsenistä, mikä estää virheellisten arvojen lipsahtamisen.ping tuumaa
  • Ylläpidettävyys: Toisiinsa liittyvät vakiot sijaitsevat yhdessä paikassa, joten arvon lisääminen tai uudelleennimeäminen päivittää koko ohjelman johdonmukaisesti.
  • Tietojen sidonta: Kehykset, kuten WPF ja ASP.NET, voivat sitoa enumin alasvetovalikkoon, mikä tekee enumeista hyödyllisiä käyttöliittymien rakentamisessa.

Koska kääntäjä tarkistaa jokaisen sijoituksen sallittuja jäseniä vasten, enumit auttavat myös havaitsemaan virheitä varhaisessa vaiheessa, ennen ohjelman suorittamista.

Mukautettujen arvojen määrittäminen C#-enumille

Oletusarvoisesti C# antaa ensimmäiselle enum-jäsenelle arvon 0 ja kasvattaa jokaista seuraavaa jäsentä yhdellä. Yllä olevassa Days-luetteloinnissa su on 0, ma on 1 ja la on 6. Voit ohittaa nämä oletusasetukset antamalla eksplisiittiset numerot.

  • Eksplisiittiset arvot: Enum Level {Low = 1, Medium = 5, High = 10} -arvon kirjoittaminen asettaa jokaiselle jäsenelle valitun numeron oletusarvon sijaan.
  • Osittainen tehtävä: Jos määrität arvon vain joillekin jäsenille, kääntäjä jatkaa numeroinnin viimeksi määritetystä arvosta seuraaville jäsenille.
  • Perustyyppi: Enum tallentaa jäsenensä oletusarvoisesti kokonaislukuna, mutta voit käyttää tavua, shorttia tai longia muistin säästämiseksi tai aluetta laajentaaksesi.

Mukautetut arvot ovat hyödyllisiä, kun numeroiden on vastattava ulkoista järjestelmää, kuten tietokantakoodeja tai protokollavakioita, jotta luettelointi peilaa todellista dataa täsmälleen.

C#-enum-arvojen muuntaminen kokonaislukuiksi, merkkijonoiksi ja lipuiksi

C#:ssa enum-arvo täytyy usein siirtää toiseen muotoon, kuten tallentaa se numerona tai lukea se takaisin tekstistä. Nämä muunnokset tapahtuvat muutamalla vakiotavalla.

  • Enum kokonaisluvuksi: Eksplisiittinen muunnos, kuten (int)Days.Wed, palauttaa pohjana olevan kokonaisluvun, joka on hyödyllinen tallennuksessa tai aritmetiikassa.
  • int-luku enum-muotoon: Toiseen suuntaan muuntaminen, esimerkiksi muotoon (Days)3, muuttaa luvun takaisin vastaavaksi enum-jäseneksi.
  • Merkkijono luetteloon: Enum.Parse ja turvallisempi Enum.TryParse muuntavat nimen, kuten ”Fri”, Days.Fri-jäseneksi heittämättä virheellistä tekstiä.
  • Enum merkkijonoksi: ToString-funktion kutsuminen mille tahansa jäsenelle palauttaa sen nimen, joten Days.Sun.ToString() tuottaa ”Sun” näytettäväksi tai lokiin kirjattavaksi.
  • Listauksen jäsenet: Enum.GetValues ​​ja Enum.GetNames palauttavat kaikki arvon tai nimen, mikä auttaa valikoiden täyttämisessä tai syötteen validoinnissa.

Kun enumin tulisi edustaa vaihtoehtojen yhdistelmää yhden sijaan, käytä Flags-attribuuttia ja anna jokaiselle jäsenelle kahden potenssi, kuten 1, 2, 4 ja 8. Voit sitten yhdistää jäseniä bittikohtaisella TAI-operaattorilla ja testata tiettyä vaihtoehtoa HasFlag-metodilla.

Nämä muunnostekniikat mahdollistavat luettelon siirtymisen selkeästi luettavien nimien, tallennettujen numeroiden ja yhdistettyjen lippujoukkojen välillä, keeping loput ohjelmasta ovat sekä tyyppiturvallisia että helppoja seurata.

UKK

Enum-muuttuja on oletusarvoltaan 0, ja se arvo yhdistetään siihen jäseneen, joka on yhtä kuin 0. Jos mikään jäsen ei ole 0, muuttujan arvo on edelleen 0, joten kehittäjät määrittelevät usein ensin Ei mitään- tai Tuntematon-jäsenen sekaannusten välttämiseksi.

Vakio määrittää yhden nimetyn arvon, kun taas enum ryhmittelee toisiinsa liittyvän joukon nimettyjä vakioita yhden tyypin alle. Enumit lisäävät myös tyyppiturvallisuutta, koska muuttuja voi sisältää vain yhden luetteloinnin määritellyistä jäsenistä.

Kyllä. Enum voidaan deklaroida nimiavaruuden sisällä tai sisäkkäin luokassa tai rakenteessa, mikä rajoittaa sen soveltamisalan kyseiseen tyyppiin. C# ei kuitenkaan salli enumin deklarointia metodin rungon sisällä.

Kyllä. Kahdella tai useammalla jäsenellä voi olla sama pohjana oleva numero, jolloin myöhemmät nimet ovat ensimmäisen aliaksia. Vertailuissa niitä käsitellään tasavertaisina, ja arvon muuntaminen merkkijonoksi palauttaa enum-luettelossa ensimmäisenä määritellyn nimen.

Enum on arvotyyppi, joten se tallentaa datansa suoraan kekoon viitteen sijaan. Se perii System.Enum-tyypistä, mutta toimii kuten alla oleva integraalityyppi, mikä tekee enum-arvojen kopioimisesta ja vertailusta nopeaa.

Kyllä. ML.NETissä voit yhdistää enumin kategoriseen ominaisuuteen tai tunnisteeseen, usein muuntamalla sen kokonaislukuarvoksi tai kertakoodaukseksi. Vahvasti tyypitetyt enumit pitävät koneoppimisputken syötesarakkeet selkeinä ja johdonmukaisina.

Kyllä. GitHub Copilot ehdottaa täydellisiä enum-määritelmiä, mukautettuja arvoja, Flags-attribuutteja ja muunnosavustajia, kuten Enum.TryParse Visual Studiossa ja VS Code. RevTarkastele jokaista ehdotusta, koska Copilot voi valita arvoja tai nimiä, jotka eivät sovi toimialueeseesi.

Käytä Enum.IsDefined-metodia, joka palauttaa arvon true, kun annettu numero tai nimi vastaa määriteltyä jäsentä. Sen ja Enum.TryParse-metodin yhdistäminen mahdollistaa käyttäjän syötteen turvallisen validoinnin ennen tekstin muuntamista enum-arvoksi.

Tiivistä tämä viesti seuraavasti: