C# Enum (Wyliczenie) z przykładem

⚡ Inteligentne podsumowanie

Wyliczenia w C# definiują nazwany zestaw stałych wartości całkowitych, takich jak dni tygodnia, co ułatwia czytanie i utrzymanie kodu. Słowo kluczowe enum deklaruje te stałe stałe jednorazowo, do ponownego wykorzystania w całym programie.

  • 📐 Definicja: Słowo kluczowe enum grupuje powiązane nazwane stałe w ramach jednego typu, zastępując rozproszone magiczne liczby czytelnymi identyfikatorami.
  • 🗓️. Przykład dni: Wyliczenie o nazwie Days przechowuje dni tygodnia, a Days.Sun zwraca wybrany element według jego nazwy.
  • 🔢 Wartości podstawowe: Elementy wyliczeniowe są odwzorowywane na wartości całkowite zaczynające się od zera i zwiększające się o jeden, chyba że zostaną przypisane niestandardowe liczby.
  • 🔁 Konwersje: Jawne rzutowania zamieniają wyliczenie na liczbę całkowitą, podczas gdy Enum.Parse i Enum.TryParse konwertują tekst z powrotem na elementy.
  • 🚩 Flagi: Atrybut Flags umożliwia łączenie kilku opcji jako pól bitowych za pomocą operatora bitowego OR.
  • 🤖 Pomoc AI: GitHub Copilot i ML.NET pomagają generować definicje wyliczeń i mapować je na funkcje uczenia maszynowego.

C# Enum(wyliczenie)

Wyliczenie C#

Wyliczenie jest używane w dowolnym języku programowania w celu zdefiniowania stałego zestawu wartości. Na przykład dni tygodnia można zdefiniować jako wyliczenie i wykorzystać je w dowolnym miejscu programu. W języku C# wyliczenie definiuje się za pomocą słowa kluczowego „enum”.

Zobaczmy przykład użycia słowa kluczowego „enum”.

W naszym przykładzie zdefiniujemy wyliczenie zwane dniami, w którym będą przechowywane dni tygodnia. W każdym przykładzie zmodyfikujemy tylko główną funkcję w naszym pliku Program.cs.

Wyliczenie C#

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 Wyjaśnienie:-

  1. „Wyliczenie” typ danych jest określony w celu zadeklarowania wyliczenia. Nazwa wyliczenia to Dni. Wszystkie dni tygodnia są określone jako wartości wyliczenia.
  2. Na koniec funkcja console.write służy do wyświetlenia jednej z wartości wyliczenia.

Jeśli powyższy kod został wpisany poprawnie i program zostanie pomyślnie wykonany, wyświetlony zostanie następujący komunikat.

Wyjście:

Wyliczenie C#

Z danych wyjściowych wynika, że ​​wartość wyliczenia „Sun” jest wyświetlana w konsoli.

Dlaczego warto używać typów wyliczeniowych w języku C#?

Wyliczenia sprawiają, że program jest łatwiejszy w czytaniu, bezpieczniejszy i prostszy w utrzymaniu. Zamiast rozrzucać niewyjaśnione liczby, czasami nazywane liczbami magicznymi, po całym kodzie, wyliczenie nadaje każdej wartości opisową nazwę, która określa jej przeznaczenie.

  • Czytelność: Nazwa taka jak Days.Fri jest o wiele bardziej oczywista niż liczba 5, więc każdy, kto przeczyta kod, od razu zrozumie jego znaczenie.
  • Bezpieczeństwo typu: Zmienna zadeklarowana przy użyciu typu wyliczeniowego może zawierać tylko jeden ze zdefiniowanych elementów, co zapobiega pojawianiu się nieprawidłowych wartościping widok
  • Łatwość konserwacji: Powiązane stałe znajdują się w jednym miejscu, więc dodanie lub zmiana nazwy wartości powoduje spójną aktualizację całego programu.
  • Wiązanie danych: Platformy takie jak WPF i ASP.NET umożliwiają powiązanie wyliczeń z listą rozwijaną, co czyni je przydatnymi przy tworzeniu interfejsów użytkownika.

Ponieważ kompilator sprawdza każde przypisanie względem dozwolonych elementów, typy wyliczeniowe pomagają wykryć błędy na wczesnym etapie, jeszcze przed uruchomieniem programu.

Przypisywanie wartości niestandardowych do wyliczenia C#

Domyślnie C# przypisuje pierwszemu elementowi wyliczenia wartość 0 i zwiększa każdy kolejny element o jeden. W powyższym wyliczeniu „Dni” (Days) „Niedz” wynosi 0, „Pon” wynosi 1, a „Sob” wynosi 6. Można zastąpić te wartości domyślne, przypisując im konkretne liczby.

  • Wartości jawne: Zapisanie poziomu wyliczeniowego {Niski = 1, Średni = 5, Wysoki = 10} powoduje ustawienie każdego elementu na wybraną liczbę zamiast domyślnej sekwencji.
  • Częściowe zadanie: Jeżeli przypiszesz wartość tylko niektórym członkom, kompilator będzie kontynuował numerację od ostatniej przypisanej wartości dla kolejnych członków.
  • Typ podstawowy: Domyślnie wyliczenia przechowują swoje elementy jako int, ale możesz je zapisać jako byte, short lub long, aby zaoszczędzić pamięć lub rozszerzyć zakres.

Wartości niestandardowe są przydatne, gdy liczby muszą odpowiadać systemowi zewnętrznemu, np. kodom bazy danych lub stałym protokołu, tak aby wyliczenie dokładnie odzwierciedlało rzeczywiste dane.

Jak konwertować typy wyliczeniowe C# na int, string i flagi

Język C# często musi przenieść wartość wyliczeniową do innej formy, na przykład zapisać ją jako liczbę lub odczytać z tekstu. Konwersje te odbywają się na kilka standardowych sposobów.

  • Wyliczenie na int: Jawne rzutowanie, takie jak (int)Days.Wed, zwraca podstawową liczbę całkowitą, co jest przydatne do przechowywania lub wykonywania obliczeń arytmetycznych.
  • int na enum: Rzutowanie w przeciwnym kierunku, na przykład (Days)3, zamienia liczbę z powrotem na odpowiadający jej element wyliczeniowy.
  • Ciąg do wyliczenia: Enum.Parse i bezpieczniejsza wersja Enum.TryParse konwertują nazwę, np. „Piątek” na element Days.Piątek bez zgłaszania nieprawidłowego tekstu.
  • Wyliczenie na ciąg: Wywołanie ToString na dowolnym elemencie zwraca jego nazwę, więc Days.Sun.ToString() tworzy „Sun” do wyświetlenia lub zarejestrowania.
  • Lista członków: Enum.GetValues ​​i Enum.GetNames zwracają wszystkie wartości i nazwy, co jest przydatne przy wypełnianiu menu lub sprawdzaniu poprawności danych wejściowych.

Gdy wyliczenie powinno reprezentować kombinację wyborów, a nie jeden, zastosuj atrybut Flags i nadaj każdemu elementowi potęgę liczby dwa, np. 1, 2, 4 i 8. Następnie możesz połączyć elementy za pomocą operatora bitowego OR i przetestować konkretną opcję za pomocą metody HasFlag.

Te techniki konwersji pozwalają na czyste przemieszczanie się wyliczeń między czytelnymi nazwami, zapisanymi liczbami i połączonymi zestawami flag.ping reszta programu jest bezpieczna pod względem typów i łatwa do zrozumienia.

FAQ

Zmienna wyliczeniowa domyślnie ma wartość 0, a wartość jest mapowana na dowolny element, który jest równy 0. Jeśli żaden element nie ma wartości 0, zmienna nadal przyjmuje wartość 0, dlatego programiści często najpierw definiują element None lub Unknown, aby uniknąć pomyłek.

Typ const definiuje jedną nazwaną wartość, podczas gdy typ wyliczeniowy grupuje powiązany zestaw stałych nazwanych w ramach jednego typu. Typy wyliczeniowe zapewniają również bezpieczeństwo typu, ponieważ zmienna może zawierać tylko jeden ze zdefiniowanych elementów wyliczenia.

Tak. Wyliczenie można zadeklarować w przestrzeni nazw lub zagnieździć w klasie lub strukturze, co ogranicza jego zakres do tego typu. C# nie zezwala jednak na deklarowanie wyliczenia w ciele metody.

Tak. Dwa lub więcej elementów może mieć ten sam numer bazowy, przez co późniejsze nazwy stają się aliasami pierwszej. Porównania traktują je jako równe, a konwersja tej wartości na ciąg znaków zwraca nazwę zdefiniowaną jako pierwsza w wyliczeniu.

Typ wyliczeniowy jest typem wartości, więc przechowuje swoje dane bezpośrednio, a nie jako referencję na stercie. Dziedziczy po System.Enum, ale zachowuje się jak typ całkowity, co przyspiesza kopiowanie i porównywanie wartości wyliczeniowych.

Tak. W ML.NET można mapować wyliczenia na cechy kategoryczne lub etykiety, często konwertując je na wartości całkowite lub stosując kodowanie one-hot. Wyliczenia o silnym typie zapewniają przejrzystość i spójność kolumn wejściowych w procesie uczenia maszynowego.

Tak. GitHub Copilot sugeruje kompletne definicje wyliczeń, wartości niestandardowe, atrybuty flag i pomocniki konwersji, takie jak Enum.TryParse w programie Visual Studio i VS Code. RevPrzejrzyj każdą sugestię, ponieważ Copilot może wybrać wartości lub nazwy, które nie pasują do Twojej domeny.

Użyj metody Enum.IsDefined, która zwraca wartość true, gdy podana liczba lub nazwa pasuje do zdefiniowanego elementu. Połączenie jej z Enum.TryParse pozwala na bezpieczną walidację danych wprowadzonych przez użytkownika przed konwersją tekstu na wartość wyliczeniową.

Podsumuj ten post następująco: