Dzisiaj chciałem poruszyć temat enum w C# czym jest i dlaczego warto go stosować.

Zacznijmy od odpowiedzi na pytanie nr 1: Czym jest słowo kluczowe enum?

Enum to typ wyliczeniowy zdefiniowanych przez zestaw nazwanych stałych bazowego typu całkowitoliczbowego.

Od razu przykład, który wyjaśni co i jak:

enum PoraRoku{
  Wiosna,
  Lato,
  Jesien,
  Zima
}

Każdej z podanych wartości odpowiada kolejna liczba całkowita począwszy od 0 (chyba, że zakodujemy to inaczej :p ), czyli tak naprawdę nasz enum wygląda tak:

enum PoraRoku{
  Wiosna = 0,
  Lato =1,
  Jesien =2,
  Zima =3
}

I tutaj nasuwa się nam pytanie numer 2: Dlaczego warto go stosować?

Odpowiedź jest prosta 🙂

Ponieważ ułatwia nam życie, gdy mamy jakiś zestaw zmiennych, który jest skończony, jak np. pora roku, kategorie produktów w sklepie, lista filmów dostępnych do obejrzenia.

Czas na przykład dlaczego warto stosować enum:

Powiedzmy, że chcemy poprosić użytkownika o podanie jaka jest pora roku i wyświetlenie komunikatu jaka jest pogoda.

Przykład z wykorzystaniem enum:

public string PodajPoreRoku(int wartosc)
{
    switch (wartosc)
    {
        case 1:
            return "wszystko się budzi do życia";
        case 2:
            return "uff ale gorąco";
        case 3:
            return "jest umiarkowanie";
        case 20:
            return "ulepimy dziś bałwana? :D ";
        default:
            return "niema takiej pory roku";
    }
    //dalsza część kodu
}

Bez enum musielibyśmy użyć albo wartości numerycznej, np. “int”, wtedy musiałoby to wyglądać mniej więcej tak:

public string PodajPoreRoku(string wartosc)
{
    switch (wartosc.ToLower())

    {
        case "wiosna":
            return "wszystko się budzi do życia";
        case "lato":
            return "uff ale gorąco";
        case "jesien":
            return "jest umiarkowanie";
        case "zima":
            return "ulepimy dziś bałwana? :D ";
        default:
            return "niema takiej pory roku";
    }
    //dalsza część kodu
}

Jak widać wartości liczbowe jakie podałem są ustalone przeze mnie i użytkownik musi wiedzieć, że 1 to wiosna, a 20 to zima. Trzeba też zadbać o sytuację, w której ktoś poda liczbę poza przedziałem.

Można też użyć np. stringa, wtedy mogłoby to wyglądać tak:

enum PoraRoku
{
    Wiosna = 5,
    Lato = 10,
    Jesien = -1,
    Zima = 4
}

Jest to bardziej przejrzyste, ale trzeba również zadbać o sytuację, w której ktoś poda np. jako wartość “ala ma kota”, ponieważ wymagany jest string, który nie jest w żaden sposób ograniczony. Dodatkowo trzeba też zadbać o zgodność z wielkością liter, ponieważ dla programu wartość “Lato” nie jest równa wartości “lato”, bo różni się to wielkością liter.

Jak widać enum może być naprawdę przydatnym typem danych.

Dodatkowe właściwości jakie związane są z enum to:

  • Możliwość przypisania elastycznie wartości numerycznych do odpowiednich pozycji np.
enum PoraRoku
{
    Wiosna = 5,
    Lato = 10,
    Jesien = -1,
    Zima = 4
}
  • Zamiana wartości na nazwę
string wartosc = PoraRoku.Wiosna.ToString();
  • Zamiana wartości na liczbę
int wartosc = (int)PoraRoku.Wiosna;

Mam nadzieję, że ten wpis poszerzył Twoją wiedzę z zakresu programowania i enum zagości w Twoim kodzie na dobre 🙂