Enum iteracijos supratimas C#
C# kalboje enums yra galinga funkcija, leidžianti apibrėžti įvardintų integralinių konstantų rinkinį. Tačiau surašyti per enum gali būti sudėtinga tiems, kurie pradeda kalbą. Dažna problema iškyla bandant kartoti enum naudojant foreach kilpą, dėl kurios atsiranda kompiliavimo laiko klaidų.
Šiame straipsnyje mes ištirsime, kaip teisingai surašyti enumą C#. Išnagrinėsime, kodėl įprastas metodas nepavyksta, ir pateiksime veiksmingą sprendimą. Šio vadovo pabaigoje aiškiai suprasite, kaip kartoti visas enum reikšmes C#.
komandą | apibūdinimas |
---|---|
Enum.GetValues | Nuskaito nurodyto sąrašo konstantų reikšmių masyvą. |
typeof | Naudojamas tam tikros klasės arba enum tipui gauti vykdymo metu. |
Cast<T>() | Konvertuoja IEnumerable elementus į nurodytą tipą. |
Console.WriteLine | Į standartinį išvesties srautą įrašo nurodytus duomenis, po kurių nurodomas dabartinės linijos baigiamasis elementas. |
foreach | Kartojama per kolekciją arba masyvą. |
Enum reikšmių išvardijimas: išsamus paaiškinimas
C# kalboje, enum tipai naudojami apibrėžti pavadintų konstantų rinkinį, suteikiantį lengviau skaitomą ir prižiūrimą būdą dirbti su susijusių reikšmių rinkiniais. Kai reikia kartoti visas an reikšmes enum, galite naudoti Enum.GetValues metodas, kuris grąžina masyvą enum vertybes. Pateiktame pavyzdyje Enum.GetValues metodas naudojamas a foreach kilpa kartoti kiekvieną Suit vertė. The typeof operatorius naudojamas tipui gauti enum, kuris perduodamas kaip argumentas Enum.GetValues. Šis metodas nuskaito visų reikšmių masyvą Suit enum, leidžianti foreach ciklo juos kartoti.
Viduje EnumerateAllSuitsDemoMethod, foreach ciklas kartojasi per kiekvieną Suit vertė ir DoSomething metodas vadinamas su srove Suit vertė. The DoSomething metodas tiesiog atspausdina Suit reikšmę konsolei naudodami Console.WriteLine metodas. Šis pavyzdys parodo, kaip efektyviai kartoti per an enum C# ir atlikite veiksmą kiekvienai vertei. Naudojant Enum.GetValues yra įprasta išvardinti enum vertės, ir tai užtikrina, kad kodas išliktų švarus ir efektyvus.
LINQ naudojimas patobulintai enum iteracijai
Kitas būdas kartoti per an enum C # apima LINQ naudojimą. Antrame pavyzdyje, Cast<T> metodas iš LINQ naudojamas konvertuoti grąžintą masyvą Enum.GetValues į stipriai spausdintą IEnumerable<T>. Tai leidžia panaudoti LINQ metodus tolesniam apdorojimui. Šiame pavyzdyje Cast<T> masyvui perduoti naudojamas metodas Suit vertybes į IEnumerable<Suit>, todėl juos galima kartoti naudojant a foreach kilpa.
The EnumerateAllSuitsUsingLinq metodas parodo šį požiūrį, kai Enum.GetValues metodas naudojamas norint gauti Suit vertybes ir Cast<T> naudojamas joms mesti Suit. The foreach ciklas, tada kartojasi per kiekvieną Suit vertė, skambinant DoSomething metodas kiekvienam. Šis metodas, kaip ir ankstesniame pavyzdyje, spausdina Suit vertė į konsolę. Naudojant LINQ, kodas gali būti skaitomesnis ir išraiškingesnis, ypač kai jis derinamas su kitomis LINQ filtravimo, rūšiavimo ar transformavimo operacijomis. enum vertybes.
Iteravimas per enumą C#
Naudojant C# ir .NET Framework
using System;
using System.Collections.Generic;
public enum Suit
{
Spades,
Hearts,
Clubs,
Diamonds
}
public class Program
{
public static void Main()
{
EnumerateAllSuitsDemoMethod();
}
public static void EnumerateAllSuitsDemoMethod()
{
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
DoSomething(suit);
}
}
public static void DoSomething(Suit suit)
{
Console.WriteLine(suit);
}
}
Eilių surašymas naudojant LINQ C#
LINQ naudojimas Enum iteracijai C#
using System;
using System.Collections.Generic;
using System.Linq;
public enum Suit
{
Spades,
Hearts,
Clubs,
Diamonds
}
public class Program
{
public static void Main()
{
EnumerateAllSuitsUsingLinq();
}
public static void EnumerateAllSuitsUsingLinq()
{
var suits = Enum.GetValues(typeof(Suit)).Cast<Suit>();
foreach (Suit suit in suits)
{
DoSomething(suit);
}
}
public static void DoSomething(Suit suit)
{
Console.WriteLine(suit);
}
}
Iteravimas per enumą C#
Naudojant C# ir .NET Framework
using System;
using System.Collections.Generic;
public enum Suit
{
Spades,
Hearts,
Clubs,
Diamonds
}
public class Program
{
public static void Main()
{
EnumerateAllSuitsDemoMethod();
}
public static void EnumerateAllSuitsDemoMethod()
{
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
DoSomething(suit);
}
}
public static void DoSomething(Suit suit)
{
Console.WriteLine(suit);
}
}
Eilių surašymas naudojant LINQ C#
LINQ naudojimas Enum iteracijai C#
using System;
using System.Collections.Generic;
using System.Linq;
public enum Suit
{
Spades,
Hearts,
Clubs,
Diamonds
}
public class Program
{
public static void Main()
{
EnumerateAllSuitsUsingLinq();
}
public static void EnumerateAllSuitsUsingLinq()
{
var suits = Enum.GetValues(typeof(Suit)).Cast<Suit>();
foreach (Suit suit in suits)
{
DoSomething(suit);
}
}
public static void DoSomething(Suit suit)
{
Console.WriteLine(suit);
}
}
Pažangūs eilių surašymo C# metodai
Kitas pažangus būdas dirbti su enums C# yra atributų naudojimas metaduomenims pridėti prie enum reikšmių. Tai gali būti ypač naudinga, kai reikia susieti papildomos informacijos su kiekvienu sąrašo nariu. Pavyzdžiui, prie kiekvienos sąrašo reikšmės galite pridėti aprašymą. The System.ComponentModel vardų erdvė suteikia a DescriptionAttribute kuri leidžia tai padaryti. Taikydami DescriptionAttribute prie kiekvienos sąrašo reikšmės, kartu su sąrašo nariais galite saugoti žmogaus skaitomus aprašus ar kitus metaduomenis. Šis metodas yra naudingas, kai naudotojo sąsajoje rodomos enum reikšmės arba registruojamos jas naudojant daugiau aprašomosios informacijos.
Norėdami gauti aprašymus, galite naudoti refleksiją. Išnagrinėję kiekvienos enum reikšmės atributus, galite išgauti ir naudoti metaduomenis, saugomus DescriptionAttribute. Tai apima tokių metodų naudojimą kaip GetCustomAttribute ir FieldInfo norėdami pasiekti atributų duomenis. Ši technika padidina enums lankstumą ir patogumą, todėl jie yra galingesni ir universalesni jūsų programose. Nors tai suteikia šiek tiek sudėtingumo, gausių metaduomenų, susietų su jūsų sąrašo reikšmėmis, pranašumai gali būti dideli, ypač didelėse ar sudėtingose sistemose, kuriose enumai naudojami plačiai.
Dažni klausimai apie eilių surašymą C#
- Kaip pridėti metaduomenis į sąrašo reikšmes?
- Galite naudoti DescriptionAttribute nuo System.ComponentModel vardų erdvę, kad pridėtumėte metaduomenis į enum reikšmes.
- Ar galite rūšiuoti sąrašo reikšmes?
- Taip, sąrašo reikšmes galite rūšiuoti naudodami LINQ metodus, pvz OrderBy.
- Kaip paversti sąrašą į sąrašą?
- Galite konvertuoti sąrašą į sąrašą naudodami Enum.GetValues ir LINQ's ToList metodas.
- Ar galite išanalizuoti eilutę į eilutę?
- Taip, eilutę galite išanalizuoti į sąrašą naudodami Enum.Parse metodas.
- Kaip patikrinti, ar reikšmė apibrėžta sąraše?
- Galite patikrinti, ar reikšmė apibrėžta sąraše, naudodami Enum.IsDefined metodas.
- Ar galite naudoti enumus su vėliavėlėmis?
- Taip, galite naudoti Flags atributą, kad sukurtumėte enum reikšmių bitų derinius.
- Kaip kartojate enumus su vėliavėlėmis?
- Norėdami kartoti enumas su vėliavėlėmis, naudokite bitines operacijas kartu su Enum.GetValues.
- Ar enums gali turėti metodus C#?
- Patys enumai negali turėti metodų, bet galite sukurti enums išplėtimo metodus.
- Kaip vartotojo sąsajoje rodomas sąrašo aprašas?
- Galite rodyti sąrašo aprašą vartotojo sąsajoje, nuskaitydami DescriptionAttribute vertė naudojant atspindį.
Baigimas: Enum iteracijos įvaldymas C#
Norint efektyviai tvarkyti įvardytų konstantų rinkinius, labai svarbu suprasti, kaip surašyti enumą C#. Naudojant tokius metodus kaip Enum.GetValues ir LINQ, galite efektyviai kartoti enum vertes ir atlikti būtinas operacijas. Be to, įtraukus metaduomenis su atributais, galite žymiai padidinti kodo lankstumą ir skaitomumą. Šie metodai suteikia patikimų problemų, su kuriomis susiduriama dirbant su enums, sprendimus, užtikrinant, kad jūsų programos išliktų švarios ir prižiūrimos.