Страницы

Поиск по вопросам

четверг, 2 мая 2019 г.

Как в метод передавать только строго определённые аргументы (enum or string). Язык C#

Есть метод и в него нужно предать заранее определённые "буквенные" варианты аргументов, для того что бы InteliSence давал подсказки того, что вобще можно ввести в это поле. Далее обработать это с помощью конструкции swich case.
Как я это себе представляю, но не представлю как сделать что бы работало.
public enum position { Director, Manager, Administrator, Secretary, Developer };
public float Salary (int position, int standing) { switch (position) { case Director: Console.WriteLine("Case Director"); break; case Manager: Console.WriteLine("Case Manager"); break; default: Console.WriteLine("Default case"); break; } return ...; }
position в аргументных скобках никак не связан с enum.
Класс должен выглядеть как то так.
class Employee { private string name; private string lastName; public enum Position { Director, Manager, Administrator, Secretary, Developer }; Position position = Position.Developer;
public Employee(string name, string lastName) { this.name = name; this.lastName = lastName; }
public float Salary(Position position, int standing) { switch (this.position) { case Director: Console.WriteLine("Case 1"); break; case Manager: Console.WriteLine("Case 2"); break; default: Console.WriteLine("Default case"); break; } return; } }


Ответ

Мне кажется, вы хотите добиться такого эффекта:
public enum Position { Director, Manager, Administrator, Secretary, Developer };
static void Main(string[] args) { Position position = Position.Developer; Salary(position); }
public static void Salary(Position position) { switch (position) { case Position.Developer: Console.WriteLine("Case Developer"); break; case Position.Administrator: Console.WriteLine("Case Administrator"); break; //и т.д. } }

Если нужно принимать именно строку, то можно сделать так:
public enum Position { Director, Manager, Administrator, Secretary, Developer };
static void Main(string[] args) { Salary("Developer"); }
public static void Salary(string str) { Position position; var isValid = Enum.TryParse(str, out position); if (isValid) switch (position) { case Position.Developer: Console.WriteLine("Case Developer"); break; case Position.Administrator: Console.WriteLine("Case Administrator"); break; //и т.д. } }

Адаптация под ваш класс:
public enum Position { Director, Manager, Administrator, Secretary, Developer }; class Employee { private string name; private string lastName; Position _position = Position.Developer;
public Employee(string name, string lastName) { this.name = name; this.lastName = lastName; Salary(_position, 5); }
public float Salary(Position position, int standing) { switch (position) { case Position.Developer: Console.WriteLine("Case 1"); break; case Position.Manager: Console.WriteLine("Case 2"); break; default: Console.WriteLine("Default case"); break; } return 0; } }

Комментариев нет:

Отправить комментарий