Výčty jsou užitečný datový typ, který vám umožní definovat seznam pojmenovaných možností pro proměnnou. Chcete-li například uložit každý den v týdnu, můžete použít výčet k reprezentaci platných hodnot.
Výčty usnadňují čtení a zápis kódu tím, že podporují smysluplná jména a omezují hodnoty, které můžete použít. Ke zpracování možných hodnot výčtu je často vhodné použít příkaz switch.
Výčty můžete deklarovat a používat v mnoha programovacích jazycích, včetně C#.
Jak deklarovat enum v C#
V C# obvykle decalre výčty na úrovni jmenného prostoru. Například v konzolové aplikaci C# můžete deklarovat své výčty jako vlastnosti třídy. Příklad si můžete prohlédnout v tomto úložiště GitHub.
třídaProgram
{
enum všední den {
Pondělí,
Úterý,
Středa,
Čtvrtek,
Pátek,
Sobota,
Neděle
}
statickýprázdnotaHlavní(tětiva[] argumenty)
{
}
}
Když deklarujete výčet, každá možnost získá celočíselnou hodnotu, která představuje její index. Ve výchozím nastavení má první hodnota ve výčtu hodnotu indexu 0. Chcete-li to změnit, můžete zadat svůj vlastní index pro první prvek, když deklarujete výčet:
enum všední den {
pondělí = 1,
Úterý,
Středa,
Čtvrtek,
Pátek,
Sobota,
Neděle
}
V tomto případě index prvního prvku pondělí začíná v 1. Index dalšího prvku úterý bude 2, a tak dále.
Jak získat přístup k hodnotě výčtu v C#
Existuje mnoho různých způsobů, jak získat přístup k hodnotám uloženým uvnitř výčtů. Hodnota vrácená pro každou možnost ve výčtu je index. Pro tento příklad hodnota Všední den. pátek je 5.
Jedním ze způsobů, jak získat název výčtu, je použití Výčty. GetName() funkce. Tím se získá název možnosti na indexu 5:
tětiva pátek = Enum. GetName(Typ(Den v týdnu), Den v týdnu. Pátek);
Řídicí panel. WriteLine("Díky bohu, že" + pátek + "!");
// Výstup = Díky bohu, že je pátek!
K hodnotě můžete také přistupovat pomocí jejího indexu. V tomto případě se hodnota na indexu 2 ve výčtu Weekday (což je úterý) uloží do proměnné:
všední den úterý = (pracovní den)2;
Řídicí panel. WriteLine("Dnes je " + úterý);
// Výstup = Dnes je úterý
Když předáte výčet jako argument do Řídicí panel. WriteLine(), toString() metoda pro výčet běží automaticky. To znamená, že místo vytištění skutečné číselné hodnoty enum, která je 5, vypíše hodnotu řetězce, pátek.
Řídicí panel. WriteLine (pracovní den. čtvrtek + "je nový" + všední den. Pátek);
// Výstup = Čtvrtek je nový pátek
Můžete také převést nebo analyzovat datový typ do celého čísla jako další způsob uložení indexu možnosti:
int mondayIndex = (int)Všední den. Pondělí;
Řídicí panel. WriteLine (mondayIndex);
// Výstup = 1
Jak porovnávat výčty v C#
V C# můžete porovnávat výčty pomocí operátorů porovnání (==, !=, , <=, >=). Tím se porovná číselná hodnota možností.
Den v týdnu 1 = Den v týdnu. Pondělí;
Den v týdnu 2 = Den v týdnu. Úterý;
-li (den1 == den2)
{
Řídicí panel. WriteLine("Dny jsou stejné.");
}
jiný
{
Řídicí panel. WriteLine("Dny jsou jiné.");
}
V tomto příkladu hodnota Weekday. Pondělí je 1 a hodnota dne v týdnu. V úterý jsou 2, takže 1 == 2 srovnání selže.
Dalším způsobem srovnání výčtů je Rovná se() metoda:
-li (den1. Rovná se (den2))
{
Řídicí panel. WriteLine("Dny jsou stejné.");
}
jiný
{
Řídicí panel. WriteLine("Dny jsou jiné.");
}
Můžete také použijte příkaz switch C# k porovnání hodnoty s každou možností ve výčtu. V tomto příkladu bude kód spadat do případu Střed:
Hodnota dne v týdnuToCompare = Den v týdnu. Středa;
přepínač (valueToCompare)
{
pouzdro Všední den. Pondělí:
Řídicí panel. WriteLine("Potřebuji kávu.");
přestávka;
pouzdro Všední den. Úterý:
Řídicí panel. WriteLine("Potřebuji kávu.");
přestávka;
pouzdro Všední den. Středa:
Řídicí panel. WriteLine("Potřebuji kávu.");
přestávka;
pouzdro Všední den. Čtvrtek:
Řídicí panel. WriteLine("Čtvrtek je nový pátek!");
přestávka;
pouzdro Všední den. Pátek:
Řídicí panel. WriteLine("Díky bohu, je pátek!");
přestávka;
pouzdro Všední den. Sobota:
Řídicí panel. WriteLine("Můj oblíbený den!");
přestávka;
pouzdro Všední den. Neděle:
Řídicí panel. WriteLine("Můj další oblíbený den!");
přestávka;
výchozí:
Řídicí panel. WriteLine("Neplatný den v týdnu.");
přestávka;
}
Jak iterovat přes enum v C#
Můžete iterovat přes výčty v C# pomocí Enum. GetValues() metoda, která vrací pole všech hodnot ve výčtu. Tento fragment kódu se vytiskne každý den v týdnu, včetně pondělí, úterý atd.:
pro každého (Den ve všední den v Enum. GetValues(Typ(Všední den)))
{
Řídicí panel. WriteLine((int)den); // Tisk indexu
Řídicí panel. WriteLine (den); // Tisk textové hodnoty
}
Hodnoty výčtu můžete také iterovat pomocí Enum. GetNames() metoda. Vrátí seznam hodnot řetězců, které představují názvy pro možnosti výčtu:
pro každého (tětiva název v Enum. GetNames(Typ(Všední den)))
{
int index = (int)(Den v týdnu) Enum. Analyzovat(Typ(Den v týdnu), jméno);
Řídicí panel. WriteLine (index); // Tisk indexu
Řídicí panel. WriteLine (jméno); // Tisk textové hodnoty
}
Použití výčtů v C#
Ve svém kódu můžete použít výčty, aby byl čitelnější a méně náchylný k chybám. Výčty mohou být také velmi užitečné při spárování s jinými strukturami, jako jsou slovníky.