Как использовать enum категории и подкатегории в рамках бота C #? - PullRequest
0 голосов
/ 28 августа 2018

Я работаю над ботом, в котором есть разные категории и много подкатегорий. Я использую enum для отображения и сбора входных данных. Здесь мне нужно отобразить только подкатегории, связанные с категорией, выбранной на предыдущем шаге, как мы можем этого добиться.

вот код, с которым я работаю.

namespace ServiceDesk.Classes
{
    public enum Category
    {
        hardware,
        software,
        email,
        UserAdmin
    };

    public enum Subcategory
    {
        Desktop, KeyBoard, Laptop, Monitor, Mouse, Printer, Scanner, Server, Tablet
    };


    [Serializable]
    public class HardwareQuery
    {
        [Prompt("Choose your {&} ? {||}")]
        public Category? Categ;

        [Prompt("Choose your {&} ? {||}")]
        public Subcategory? SubCateg;

        [Prompt("Please enter {&}")]
        [Pattern(Utility.Phone)]
        public string PhoneNumber { get; set; }

        [Prompt("Please enter {&} ")]
        [Pattern(Utility.Email)]
        public string Email { get; set; }

        [Prompt("Please provide your business need / {&} below")]
        public string Justification { get; set; }

        public static IForm<HardwareQuery> BuildForm()
        {
            return new FormBuilder<HardwareQuery>()
                    .Message("Welcome!")
                    .Build();
        }
    }
}

1 Ответ

0 голосов
/ 28 августа 2018

Вы можете использовать текущие методы FormBuilder для динамического определения вашей формы. Вы можете найти документы об этом здесь . В двух словах, на что вы хотите обратить особое внимание, это использовать FieldReflector, который позволит вам настроить асинхронный делегат для построения вашего динамического списка подкатегории.

Ваш метод BuildForm будет выглядеть примерно так:

 public static IForm<HardwareQuery> BuildForm()
    {
        return new FormBuilder<HardwareQuery>()
              .Message("Welcome!")
              .Field(nameof(Categ))
              .Field(new FieldReflector<HardwareQuery>(nameof(SubCateg))
                  .SetType(null)
                  .SetDefine(async (state, field) =>
                  {
                       //// Define your SubCateg logic here
                      switch (state.Categ)
                      {
                          Category.hardware:
                            break;
                          default:
                              break;
                      }


                      return true;
                  }))
              .Field(nameof(PhoneNumber))
              .Field(nameof(Email))
              .Field(nameof(Justification))
              .Build();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...