Страницы

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

понедельник, 24 февраля 2020 г.

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

#c_sharp


Есть метод и в него нужно предать заранее определённые "буквенные" варианты аргументов,
для того что бы 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;
    }
}

    


Ответы

Ответ 1



Мне кажется, вы хотите добиться такого эффекта: 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; } }

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

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