powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно использовать enum + switch?
12 сообщений из 12, страница 1 из 1
Как правильно использовать enum + switch?
    #39031930
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Помогите, пожалуйста, разобраться с использованием enum и switch вместе.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
namespace Award_staff_enum
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.FillPost();
        }
        
        private void btn_prize_Click(object sender, EventArgs e)
        {
            int result;
            int countHours = Int32.Parse(tbx_countHours.Text);
            
            // Здесь ошибка - ни одна из перегрузок Parse не принимает один аргумент
            Employees element = (Employees)Enum.Parse((typeof)Employees, cbx_Post.SelectedText);
            switch (element)
            {
                case Employees.Охранник:
                    result = Int32.Parse(Employees.Охранник.ToString());
                    break;
                case Employees.Упаковщик:
                    result = Int32.Parse(Employees.Упаковщик.ToString());
                    break;
                case Employees.Инспектор:
                    result = Int32.Parse(Employees.Инспектор.ToString());
                    break;
                default:
                    result = Int32.Parse(Employees.Охранник.ToString());
                    break;
            }
        }

        // Заполнение выпадающего списка должностей
        private void FillPost()
        {
            Array array = Enum.GetValues(typeof(Employees));
            for (int i = 0; i < array.Length; i++)
            {
                cbx_Post.Items.Add(array.GetValue(i));
                if (i == 0)
                {
                    cbx_Post.SelectedItem = array.GetValue(i);
                }
            }
        }
        
    }
    
    public enum Employees
    {                
        Охранник = 110,     
        Упаковщик = 120,             
        Инспектор = 150,     
        Касир = 160,       
        Директор = 165,     
        Экономист = 175,     
        Уборщица = 80        
    }
}


Что не так сделал, подскажите.
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39031932
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(typeof)Employees - неправильно, правильно: typeof(Employees)
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39031943
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибки две: использовать кириллицу и парсить enum по тексту
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39031944
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Три - заполнять элементы в конструкторе вместо события Load
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39031947
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё здесь у меня ошибка :
Код: c#
1.
2.
3.
case Employees.Упаковщик:
result = Int32.Parse(Employees.Упаковщик.ToString());
break;


FormatExeption не обработано. Входная строка имела неверный формат. А как вообще в идеале должно быть? Кирилица мне нужна для списка в ComboBox. Если так сделать - cbx_Post.SelectedItem.ToString() ?
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39031969
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman,

присвоить список перечислений комбобоксу можно всего одной строкой:
Код: c#
1.
comboBox.DataSource = Enum.GetNames(typeof(Employees));


Получить работника из комбобокса из скастить его к целому числу:
Код: c#
1.
2.
3.
Employees employee;
Enum.TryParse(comboBox.Text, out employee); // люблю краткие решения (хотя это может приводить к ошибкам)
int result = (int)employee; // <-- !!!


Вот только зачем понадобилось целочисленное значение? Обычно перечисления для того и делают, чтобы работать с ними, а не безликими числами. Если пишется свитч, то в нём и используется говорящее значение перечисления:
Код: c#
1.
2.
3.
4.
case Employees.Охранник:
// Тут какая-то обработка охранника.
// При этом не важно, какое значение у этого перечисления.
break;
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39032702
erman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно проверять значение к-ва отработанных часов за месяц, например, охранника и затем сравнивать эту константу из enum c введённым пользователем значением.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
switch (element)
            {
                case Employees.Охранник:
                    result = Int32.Parse(Employees.Охранник.ToString());
                    break;
                case Employees.Упаковщик:
                    result = Int32.Parse(Employees.Упаковщик.ToString());
                    break;
                case Employees.Инспектор:
                    result = Int32.Parse(Employees.Инспектор.ToString());
                    break;
                case Employees.Касир:
                    result = Int32.Parse(Employees.Касир.ToString());
                    break;                
                default:
                    result = Int32.Parse(Employees.Охранник.ToString());
                    break;
            }

            if (Int32.Parse(tbx_countHours.Text) > result)
            {
                lbl_resultPrize.Text = "Превышено к-во отработанных часов!";
            }
            else
            {
                lbl_resultPrize.Text = "Недостаточное к-во отработанных часов!";
            }
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39032704
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman,

е-мое.... вместо всего свича

Код: c#
1.
result = (Int32)element;
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39032708
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman,
Правильно кас с ир.
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39032710
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
erman
Код: c#
1.
            if (Int32.Pаrse(tbx_countHours.Text) > result)



Это что получается - за каждым элементом энума лежит Int32 число часов? А если у двух кадров должно быть одно и то же количество часов?

Проще создать класс Employee, от него отнаследовать всяких охранников и кассиров, у них как-то инициализировать поле WorkTime и забыть о свичах.
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39032713
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pallariserman
Код: c#
1.
            if (Int32.Pаrse(tbx_countHours.Text) > result)




Это что получается - за каждым элементом энума лежит Int32 число часов? А если у двух кадров должно быть одно и то же количество часов?

Проще создать класс Employee, от него отнаследовать всяких охранников и кассиров, у них как-то инициализировать поле WorkTime и забыть о свичах.
Нефик, пущая экономисты пашут как волы
...
Рейтинг: 0 / 0
Как правильно использовать enum + switch?
    #39032750
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему автор придумал для себя геморой, зачем ему это?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно использовать enum + switch?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]