Как использовать enum категории и подкатегории в рамках бота C#?
Я работаю над ботом, где есть разные категории и много подкатегорий. Я использую 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 ответ
Вы можете использовать текущие методы 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();
}