# 000123. Блочные конструкции. Перечисления

Блочные конструкции. Перечисления||wmysterio|wmysterio|<wmysterio@yandex.ru>|||Всем привет! Мы немного уйдёт от темы скриптинга GTA 4 и немного поговорим о c# как язык программирования. Этот урок я хотел бы посвятить перечислениям. Они же **enum**. Эта конструкция являет собой сборку данных, как правило одного типа. Объявляются они следующим образом:<br>

| <p>enum День {<br> /<br>     <em>строки перечисления</em><br>/<br>}<br></p> |
| --------------------------------------------------------------------------- |

Каждый элемент может иметь своё значение, причём тип данных не указывается. Мы можем хранить строку одного типа, а другая может быть вовсе другой. Между этими строками ставится запятая. Вот неплохой пример:<br>

| <p>enum День {<br>     Понедельник = 0,<br>     Вторник = 1,<br>     Среда = 2,<br>     Четверг = 3,<br>     Пятница = 4,<br>     Суббота = 5,<br>     Восресенье = 6<br>}</p> |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

Обращение к элементам перечисления такое же, как и у структуры:<br>

| <p><strong>День</strong>.Пятница<br></p> |
| ---------------------------------------- |

Но главное отличие от структуры в том, что мы можем явно указывать значение в конструкции, но не можем этого сделать в теле программы. Это можно сравнить с константами - мы жестко закрепляем значение перечисления в блоке и можем только прочитать данные, что в нём находятся. Ещё отличается перечисление от структуры тем, что мы можем указывать в качестве значения только следующие типы данных:

| <p>byte, sbyte, short, ushort, int, uint, long или ulong<br></p> |
| ---------------------------------------------------------------- |

То есть нельзя указать класс, структуру, массив или ещё какой-то тип данных, но для этого перечисления не созданы. Возникает вопрос - "Как распознать перечисление от той же структуры?" Распознать очень легко. Если вы пользуетесь редакторами типа Visual Studio, то это не составит труда. Как правило обозначаются перечисления следующим значком:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/39559150.png)\
Каким-же образом получить данные? Так как Enum вмещает произвольные данные, то нам необходимо преобразовать значение под нужный тип. Делается это по следующей формуле:<br>

| <p>Тип Переменная = (Тип)Выражение;<br></p> |
| ------------------------------------------- |

В нашем случаи это так:<br>

| <p>int i = (int)<strong>День</strong>.<strong>Вторник</strong>;<br></p> |
| ----------------------------------------------------------------------- |

Выражение в скобках указывает **в** кокой тип данных будет идти преобразование. После скобки "**)**" указываем **что конкретно** мы будем преобразовать. Такое преобразование следует делать только в том случаи, если вы наверняка знаете какой тип находится в поле перечисления\
\
Важно! Как правило имя перечисления и его поля задают латинскими символами. У меня получилось скомпилировать код с кирилицей, но всё же лучше перестраховаться.|496|1|0|39559150`png`19\`20||blochnye\_konstrukcii\_perechislenija|1392798790


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000123.-blochnye-konstrukcii.-perechisleniya.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
