C#Enums:Ваш друг в мире перечислимых типов

Здравствуйте, будущий coding superstar! Сегодня мы окунемся в чудесный мир перечислимых типов (enums) в C#. Не волнуйтесь, если вы раньше не слышали о них – к концу этого руководства вы станете экспертом по enum! Так что давайте начнем это захватывающее путешествие вместе.

C# - Enums

Что такое Enums?

Представьте, что вы создаете игру, где игроки могут выбирать различные классы персонажей. У вас могут быть воины, маги, стрелки и целители. Как бы вы представили эти варианты в вашем коде? Вот где на помощь приходят enums!

Enum (сокращение от enumeration) – это особый тип в C#, который позволяет вам определять набор именованных констант. Это как создание собственного типа с фиксированным набором возможных значений. Круто, правда?

Почему использовать Enums?

  1. Они делают ваш код более читаемым.
  2. Они помогают предотвратить ошибки, ограничивая выбор до предопределенного набора.
  3. Они великолепны для представления категорий или опций.

Объявление Enum

Давайте начнем с азов. Вот как вы объявляете enum:

enum CharacterClass
{
Warrior,
Mage,
Archer,
Healer
}

В этом примере мы создали enum под названием CharacterClass с четырьмя возможными значениями. По умолчанию C# assigns integer значения каждому члену enum, начиная с 0.

Использование Enums в вашем коде

Теперь, когда мы объявили наш enum, давайте посмотрим, как мы можем использовать его в нашем коде:

class Program
{
static void Main(string[] args)
{
CharacterClass myClass = CharacterClass.Warrior;
Console.WriteLine($"My character class is: {myClass}");
}
}

Когда вы запустите этот код, он выведет:

My character class is: Warrior

Неablyudarivno? Мы только что создали переменную типа CharacterClass и присвоили ей значение Warrior. Это как если бы вы дали вашему персонажу идентификационную карточку!

Значения Enums и привязка

Помните, как я mentioned, что enums присваивают integer значения? Давайте углубимся в это немного больше:

Console.WriteLine($"Warrior value: {(int)CharacterClass.Warrior}");
Console.WriteLine($"Mage value: {(int)CharacterClass.Mage}");
Console.WriteLine($"Archer value: {(int)CharacterClass.Archer}");
Console.WriteLine($"Healer value: {(int)CharacterClass.Healer}");

Это выведет:

Warrior value: 0
Mage value: 1
Archer value: 2
Healer value: 3

Здесь мы используем привязку (это то, что делает (int) часть) для преобразования наших enum значений в integer. Это как заглянуть за занавес, чтобы увидеть, как C# организует наш enum!

Пользовательские значения Enums

Но подождите, есть еще больше! Что, если вы хотите присвоить конкретные значения вашим enum членам? Вы можете сделать и это:

enum CharacterClass
{
Warrior = 1,
Mage = 5,
Archer = 10,
Healer = 15
}

Теперь, если мы запустим наш предыдущий код для вывода значений, мы получим:

Warrior value: 1
Mage value: 5
Archer value: 10
Healer value: 15

Это может быть полезно, когда вам нужно, чтобы ваши enum значения соответствовали конкретным числам в вашей игре или приложении.

Enums и switch statements

Enums и switch statements – это как арахисовое масло и джем – они просто великолепно работают вместе! Вот пример:

static void DescribeClass(CharacterClass characterClass)
{
switch (characterClass)
{
case CharacterClass.Warrior:
Console.WriteLine("You are a brave warrior, strong in combat!");
break;
case CharacterClass.Mage:
Console.WriteLine("You are a wise mage, master of arcane arts!");
break;
case CharacterClass.Archer:
Console.WriteLine("You are a skilled archer, deadly at a distance!");
break;
case CharacterClass.Healer:
Console.WriteLine("You are a compassionate healer, keeper of life!");
break;
default:
Console.WriteLine("Unknown class. Are you a secret class?");
break;
}
}

Теперь мы можем использовать эту функцию следующим образом:

DescribeClass(CharacterClass.Mage);

И она выведет:

You are a wise mage, master of arcane arts!

Парсинг Enums

Иногда вам может потребоваться преобразовать строку в enum значение. Например, если игрок вводит выбранный им класс. Вот как это можно сделать:

string input = "Archer";
if (Enum.TryParse(input, out CharacterClass playerClass))
{
Console.WriteLine($"You've chosen to be an {playerClass}!");
}
else
{
Console.WriteLine("That's not a valid character class!");
}

Этот код безопасно пытается преобразовать строку "Archer" в наш CharacterClass enum. Если это удается, он выведет:

You've chosen to be an Archer!

Методы Enums

Давайте закончим таблицей полезных методов enum:

Метод Описание Пример
Enum.GetNames() Возвращает массив имен констант в указанном перечислимом типе string[] names = Enum.GetNames(typeof(CharacterClass));
Enum.GetValues() Возвращает массив значений констант в указанном перечислимом типе CharacterClass[] values = (CharacterClass[])Enum.GetValues(typeof(CharacterClass));
Enum.IsDefined() Возвращает булево значение, указывающее, существует ли константа с указанным значением в указанном перечислимом типе bool isDefined = Enum.IsDefined(typeof(CharacterClass), "Warrior");
Enum.Parse() Преобразует строковое представление имени или числового значения одной или нескольких перечислимых констант в эквивалентный объект перечислимого типа CharacterClass parsedEnum = (CharacterClass)Enum.Parse(typeof(CharacterClass), "Mage");
Enum.TryParse() Преобразует строковое представление имени или числового значения одной или нескольких перечислимых констант в эквивалентный объект перечислимого типа. Возвращаемое значение указывает, удалось ли преобразование bool success = Enum.TryParse("Healer", out CharacterClass result);

И вот и все, мои дорогие студенты! Вы только что повысили свои навыки C# и овладели enum. Помните, что практика делает мастера, так что试着 создавать свои собственные enum для различных сценариев. Может быть, вы можете сделать enum для дней недели, или начинок для пиццы, или даже ваших любимых языков программирования!

Продолжайте программировать, продолжайте учиться и, самое главное, получайте удовольствие! До следующего раза, пусть ваш код будет без ошибок и компиляция быстрая!

Credits: Image by storyset