Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
1 / 1 / 1
Регистрация: 19.06.2013
Сообщений: 67
1

Инициализация в классе полей типа Enum

24.08.2015, 09:04. Просмотров 4550. Ответов 7
Метки нет (Все метки)

Добрый день!

Есть класс, в нем есть поле перечисления.
C#
1
2
3
4
5
6
7
8
9
10
11
class Worker
{
   private string name;
   private EnumEmployees post;
 
   public Worket (string name, string strPost)
   {
      this.name = name;
      //второе поле
   }
}
Перечисление:
C#
1
2
3
enum EnumEmployees
{
   VicePresident = 1;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2015, 09:04
Ответы с готовыми решениями:

Почему перечисления enum объявляются в пространстве имен а не, например, в классе?
Совсем недавно взялся я усиленно за C# и остановился на перечислениях. Почему они объявляются в...

Как с помощью Enum создать список областей в родительском классе и связать его с базовым
Скажите как с помощью Enum создать список областей в родительском классе и связать его с базовым? ...

Реализованы ли в коде объявление и инициализация в отдельном классе
Приветствую, гуру кода! Есть такой код class Point { //класс одной точки ...

Инициализация полей классов
Сколько раз здесь будет инициализирован x? class InitialierTestClass { public...

7
Эксперт .NETАвтор FAQ
9644 / 4757 / 1710
Регистрация: 11.01.2015
Сообщений: 5,933
Записей в блоге: 34
24.08.2015, 09:18 2
Keller47, А почему передается строка, вместо EnumEmployees ?
Парсить строки можно с помощью Enum.Parse(). Однако это не функция класса Worker и ему должно передаваться уже распарсенное значение.
1
1 / 1 / 1
Регистрация: 19.06.2013
Сообщений: 67
24.08.2015, 11:32  [ТС] 3
Storm23, да не дописал пост, случайно на отправить нажал ... Дурацкая система с редактированием ...

Еще раз вопрос:

Добрый день!

Поскажите, как происходит инициализация полей типа перечисления. Если пользователем вводится обычная строка.

Есть класс, в нем есть поле перечисления.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Worker
 
{
 
   private string name;
 
   private EnumEmployees post;
 
 
 
   public Worket (string name, string strPost)
 
   {
 
      this.name = name;
 
      //Сам вопрос, эт оправильно?: Enum.Parse(typeof(EnumEmployees ), strPost);
 
   }
 
}


Перечисление:

C#
1
2
3
4
5
6
7
8
9
enum EnumEmployees
 
{
 
   VicePresident = 1;
 
   Manager = 140;
 
}


Мейн:



C#
1
2
3
4
5
6
7
static void Main(string[] args)
 
{
 
   worker w1 = new Worker("Vasya", "VicePresident");
 
}

Относительно "Парсить строки можно с помощью Enum.Parse(). Однако это не функция класса Worker и ему должно передаваться уже распарсенное значение.": я правильно понимаю, что если мы хотим в класс передавать строку, которая должна стать типом перечисления, то нужно, допустим, использовать дополнительный метод, который будет парсить, а в поле уже передавать подходящее значение?
Можете показать это на простеньком примере?
0
2 / 2 / 0
Регистрация: 29.07.2015
Сообщений: 13
24.08.2015, 12:21 4
Keller47, если вы хотите инициализировать свойство, которое представляет тип EnumEmployees, то в конструктор лучше напрямую передавать объект EnumEmployees:
C#
1
2
3
4
5
6
7
8
9
public Worket (string name, EnumEmployees strPost)
 
   {
 
      this.name = name;
 
      this.post = strPost;
 
   }
0
1 / 1 / 1
Регистрация: 19.06.2013
Сообщений: 67
24.08.2015, 12:29  [ТС] 5
solntce, а как тогда аргумент должен выглядеть? То есть в качестве аргумента при объявлении экземпляра класса мы будем передавать строку и EnumEmployees

C#
1
worker w1 = new Worker("Vasya", /*как сюда передать значение EnumEmployees*/);
0
Эксперт .NETАвтор FAQ
9644 / 4757 / 1710
Регистрация: 11.01.2015
Сообщений: 5,933
Записей в блоге: 34
24.08.2015, 13:11 6
Лучший ответ Сообщение было отмечено Keller47 как решение

Решение

Цитата Сообщение от Keller47 Посмотреть сообщение
я правильно понимаю, что если мы хотим в класс передавать строку, которая должна стать типом перечисления, то нужно, допустим, использовать дополнительный метод, который будет парсить, а в поле уже передавать подходящее значение?
Да, правильно, только этот метод должен быть не в классе Worker, а двумя этажами выше - в GUI, в контроллере или в view. Проще говоря парсинг должен быть в вашей форме. В доменной модели (Worker и т.п.) парсингу пользовательского ввода делать нечего.

Добавлено через 1 минуту
Да, и try/catch там же не забудьте.
0
4569 / 3143 / 1342
Регистрация: 09.05.2015
Сообщений: 7,721
24.08.2015, 14:49 7
Почему просто не сделать
Код
worker w1 = new Worker("Vasya", EnumEmployees.VicePresident);
?
1
1 / 1 / 1
Регистрация: 19.06.2013
Сообщений: 67
24.08.2015, 15:49  [ТС] 8
Someone007, Storm23, Спасибо за помощь!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2015, 15:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Инициализация полей структуры
Всем, привет. Такой вопрос, при написании вот такого кода в c# struct a { } int main() { ...

Не происходит инициализация полей
есть класс public class DinnerParty { private const int costOfFoodPerPerson = 30; ...

Инициализация полей структур
Насколько знаю, у экземпляров классов поля всегда инициализируются значениями по умолчанию перед...

Сохранение свойства enum-типа в xml
Есть созданный мной enum MyEnum, который является свойством некоего класса. Класс для хранения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.