Paweł Łukasiewicz
2019-06-03
Paweł Łukasiewicz
2019-06-03
Wprowadzenie
W języku C# słowo enum reprezentuje typ wyliczeniowy. Typ wyliczeniowy to stałe liczby reprezentowane przez wartość. W poniższym wpisie skupimy się na kilku przykładach pracy z typami wyliczeniowymi.
Enum to sposób na definiowanie zestawu nazwanych, stałych całkowitych, które mogą zostać przypisane do zmiennej. Każdy z elementów wyliczenia jest reprezentowany przez wartość całkowitą zaczynającą się od 0 (o ile domyślne zachowanie nie zostane nadpisane przez programistę).
Tym wyliczeniowy jest deklarowany przez słowo kluczowe enum po którym pojawia się nazwa zdefiniowanego wyliczenia i jej wartości w nawiasie.
Poniżej przykład definicji dla różnych typów samochodów:
enum CarTypes
{
Hatchback,
Sedan,
MPV,
SUB,
Crossover,
Coupe,
Convertible
}
W powyższym przykładzie pierwsza wartość, tj. Hatchback ma przypisana wartość 0 a każda kolejna jest zwiększana o 1.
Tyle tytułem wprowadzenia. Przejdźmy do właściwej części artykułu i 7-miu sposobów na pracę z typem wyliczeniowym.
1. Deklaracja typów wyliczeniowych
Poniżej przykład deklaracji dwóch typów wyliczeniowych:
enum CarTypes
{
Hatchback,
Sedan,
MPV,
SUV,
Crossover,
Coupe,
Convertible
}
enum OptymizedCarTypes : byte
{
Hatchback,
Sedan,
MPV,
SUV,
Crossover,
Coupe,
Convertible
}
Domyślną reprezentacją całkowitą typu wyliczeniowego jest int - pozwala na przechowywanie 4,294,967,295 wartości. Użycie drugiego wariantu ograniczą tą liczbę do zakresu wartości 0 – 255 pozwalając przy tym zaoszczędzić ilość miejsca zajmowanego przez daną wartość. Jeżeli typy wyliczeniowe przechowujemy w bazie danych czy pliku binarnym zajmą one 1 bajt zamiast 4 w przypadku pierwszej deklaracji.
Domyślna wartość to 0 – zwiększna o 1 dla każdej kolejnej wartości. Możemy jednak przypisać swoje własne wartości w poniższy sposób:
enum CarTypes
{
Hatchback = 2,
Sedan = 4,
MPV = 6,
SUV,
Crossover,
Coupe,
Convertible
}
Każda kolejna, nieokreślona wartość, jest większa o 1 od poprzedzającej.
2. Iterowanie typów wyliczeniowych
Metoda GetValues(...) pozwala na przechodzenie przez wartości wyliczeniowe. W poniższym fragmencie kodu wyświetlimy wszystkie zdefiniowane typy pojazdów:
// poniższy kod pozwala na wyświetlenie wartości liczbowych
// odpowiadająchych kolejnym typom pojazdów
foreach (int item in Enum.GetValues(typeof(CarTypes)))
{
Console.WriteLine(item);
}
Jeżeli chcemy poznać reprezentację tekstową możemy posłużyć się poniższym kodem:
foreach (string item in Enum.GetNames(typeof(CarTypes)))
{
Console.WriteLine(item);
}
3. Enum -> łańcuch znaków
W tym celu możemy posłużyć się metodą ToString(), która pozwala na przekonwertowanie wartości wyliczeniowej na łańcuch znaków:
string value = CarTypes.Convertible.ToString();
4. Enum -> reprezentacja całkowita
W powyższym przypadku możemy skorzystać z metody wspominej powyżej, tj. GetValues(...) lub skorzystać z prostego rzutowania:
int i = (int)CarTypes.Convertible;
5. Enum wg. wartości liczbowej
Metoda Enum.GetName pozwala na pobranie nazwy wartości wyliczeniowej. Używając poniższego kodu jesteśmy w stanie pobrać nazwę wartości konkretnego typu wyliczeniowego:
string s = Enum.GetName(typeof(CarTypes), 7);
6. Tablica wszystkich wartości wyliczeniowych
Poniższy kod pozwala na pobranie wszystkich wartości typów wyliczeniowych i przypisanie ich do tablicy:
string[] carTypesArray = Enum.GetNames(typeof(CarTypes));
7. Lista wszystkich wartości wyliczeniowych
Poniższy kod pozwala na dodanie wszystkich wartości typów wyliczeniowych do listy a następnie przeprowadzenia iteracji w celu wyświetlania tych wartości:
List<string> carTypesList = new List<string>(Enum.GetNames(typeof(CarTypes)));
foreach (string item in carTypesList)
{
Console.WriteLine(item);
}
Podsumowanie
I to już wszystko w tym wpisie. Mam nadzieję, że praca z typami wyliczeniowymi będzie prostsza i bardziej efektywna.