C# Enum(изброяване) с пример

⚡ Умно обобщение

Изброяванията в C# дефинират именуван набор от константни интегрални стойности, като например дните от седмицата, което прави кода по-лесен за четене и поддръжка. Ключовата дума enum декларира тези фиксирани константи веднъж за повторна употреба в програмата.

  • 📐 Определение: Ключовата дума enum групира свързани именувани константи под един тип, замествайки разпръснатите магически числа с четливи идентификатори.
  • Пример за дни: Изброяване, наречено Days, съхранява дните от седмицата, а Days.Sun връща избрания член по неговото име.
  • 🔢 Основни ценности: Членовете на изброяване се съпоставят с целочислени стойности, които започват от нула и се увеличават с едно, освен ако не са зададени персонализирани числа.
  • 🔁 Реализации: Изричните преобразувания превръщат enum в цяло число, докато Enum.Parse и Enum.TryParse преобразуват текст обратно в членове.
  • 🚩 Знамена: Атрибутът Flags позволява на едно изброяване да комбинира няколко опции като битови полета, използвайки побитовия оператор OR.
  • 🤖 AI помощ: GitHub Copilot и ML.NET помагат за генериране на дефиниции за изброявания и съпоставяне на изброявания с функции за машинно обучение.

C# Enum(Изброяване)

C# изброяване

Изброяването се използва във всеки език за програмиране, за да се дефинира постоянен набор от стойности. Например, дните от седмицата могат да бъдат определени като изброяване и използвани навсякъде в програмата. В C# изброяването се дефинира с помощта на ключовата дума 'enum'.

Нека видим пример за това как можем да използваме ключовата дума „enum“.

В нашия пример ще дефинираме изброяване, наречено дни, което ще се използва за съхраняване на дните от седмицата. За всеки пример ще модифицираме само основната функция в нашия файл Program.cs.

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 Обяснение:

  1. "преброяването" тип данни е посочено за деклариране на изброяване. Името на изброяването е Дни. Всички дни от седмицата са посочени като стойности на изброяването.
  2. Накрая функцията console.write се използва за показване на една от стойностите на изброяването.

Ако горният код е въведен правилно и програмата е изпълнена успешно, ще се покаже следният изход.

Изход:

C# изброяване

От изхода можете да видите, че стойността „Sun“ на изброяването се показва в конзолата.

Защо да използваме преброявания (enums) в C#?

Изброяванията правят програмата по-лесна за четене, по-безопасна и по-лесна за поддръжка. Вместо да разпръсква необясними числа, понякога наричани магически числа, из целия код, изброяването дава на всяка стойност описателно име, което посочва нейното предназначение.

  • Точност: Име като Days.Fri е далеч по-ясно от числото 5, така че всеки, който чете кода, веднага разбира значението.
  • Безопасност на типа: Променлива, декларирана с тип enum, може да съдържа само един от дефинираните членове, което предотвратява изпускането на невалидни стойности.ping инча
  • Поддържаемост: Свързаните константи се намират на едно място, така че добавянето или преименуването на стойност актуализира цялата програма последователно.
  • Обвързване на данни: Фреймуъркове като WPF и ASP.NET могат да обвържат enum с падащ списък, което прави enum-ите полезни за изграждане на потребителски интерфейси.

Тъй като компилаторът проверява всяко присвояване спрямо разрешените членове, изброяванията също помагат за ранно откриване на грешки, преди програмата да се изпълни.

Присвояване на персонализирани стойности на C# Enum

По подразбиране C# присвоява на първия член на изброяването стойност 0 и увеличава всеки следващ член с едно. В изброяването Days по-горе, Sun е равно на 0, Mon е равно на 1, а Sat е равно на 6. Можете да промените тези стойности по подразбиране, като присвоите изрични числа.

  • Изрични стойности: Записването на enum Level {Low = 1, Medium = 5, High = 10} задава на всеки член избрано число вместо последователността по подразбиране.
  • Частично задание: Ако присвоите стойност само на някои членове, компилаторът ще продължи номерирането от последната присвоена стойност за следващите членове.
  • Базов тип: Един enum съхранява членовете си като int по подразбиране, но можете да го базирате на byte, short или long, за да спестите памет или да разширите диапазона.

Персонализираните стойности са полезни, когато числата трябва да съвпадат с външна система, като например кодове на база данни или константи на протоколи, така че изброяването да отразява точно реалните данни.

Как да конвертирате C# Enums в int, string и Flags

C# често трябва да премести стойност от enum в друга форма, например да я съхрани като число или да я прочете обратно от текст. Тези преобразувания се случват по няколко стандартни начина.

  • Преброяване към цяло число: Изрично преобразуване, като например (int)Days.Wed, връща основното цяло число, което е полезно за съхранение или аритметика.
  • int към enum: Преобразуването в обратната посока, например (Days)3, връща числото обратно в съответстващия член на изброяването.
  • Низ за изброяване: Enum.Parse и по-безопасният Enum.TryParse конвертират име като „Fri“ в члена Days.Fri, без да хвърлят невалиден текст.
  • Преброяване към низ: Извикването на ToString за който и да е член връща неговото име, така че Days.Sun.ToString() генерира „Sun“ за показване или регистриране.
  • Членове на обявата: Enum.GetValues ​​и Enum.GetNames връщат всяка стойност или име, което помага при попълване на менюта или валидиране на входни данни.

Когато дадено изброяване трябва да представлява комбинация от опции, а не една, приложете атрибута Flags и дайте на всеки член степен две, например 1, 2, 4 и 8. След това можете да комбинирате членовете с побитовия оператор OR и да тествате за конкретна опция с метода HasFlag.

Тези техники за преобразуване позволяват на изброяване да се движи гладко между четливи имена, съхранени числа и комбинирани набори от флагове, запазвайкиping останалата част от програмата е едновременно типово безопасна и лесна за следване.

Въпроси и Отговори

Променливата от типа enum по подразбиране е 0, стойността, съпоставена с който и да е член, е равна на 0. Ако никой член не е 0, променливата все още съдържа 0, така че разработчиците често първо дефинират член None или Unknown, за да избегнат объркване.

Константата дефинира една именувана стойност, докато изброяването групира свързан набор от именувани константи под един тип. Изброяванията също така добавят безопасност на типа, защото променливата може да съдържа само един от дефинираните членове на изброяването.

Да. Един enum може да бъде деклариран в пространство от имена или вложен в клас или структура, което ограничава обхвата му до този тип. C# обаче не позволява enum да бъде деклариран в тялото на метод.

Да. Два или повече члена могат да споделят едно и също базово число, което прави по-късните имена псевдоними на първите. Сравненията ги третират като равни и преобразуването на тази стойност в низ връща името, дефинирано първо в изброяването.

Един enum е стойностен тип, така че съхранява данните си директно, а не като препратка в heap-а. Той наследява System.Enum, но се държи като интегралния тип отдолу, което прави копирането и сравняването на enum стойности бързо.

Да. В ML.NET можете да съпоставите enum с категориална функция или етикет, често чрез преобразуване в неговата целочислена стойност или еднократно кодиране. Силно типизираните enum поддържат входните колони на конвейера за машинно обучение ясни и последователни.

Да. GitHub Copilot предлага пълни дефиниции за изброявания, персонализирани стойности, атрибути Flags и помощни инструменти за преобразуване, като например Enum.TryParse във Visual Studio и VS Code. Revпреглеждайте всяко предложение, тъй като Copilot може да избере стойности или имена, които не отговарят на вашия домейн.

Използвайте метода Enum.IsDefined, който връща true, когато дадено число или име съвпада с дефиниран член. Сдвояването му с Enum.TryParse ви позволява безопасно да валидирате потребителския вход, преди да конвертирате текст в enum стойност.

Обобщете тази публикация с: