我正在使用MS bot框架并构建一个对话框表单.对于用户可用的选项,我使用枚举和此代码来构建表单:
return new FormBuilder<InsuranceDialogForm>()
.Message("Sure, I will need to ask you a couple of questions first.")
.Build();
Run Code Online (Sandbox Code Playgroud)
我的枚举看起来像这样:
public class InsuranceDialogForm
{
//[Prompt("Are you our customer?")]
//Disabled prompt because otherwise choice buttons won't appear
public IsCurrentCustomer IsCurrentCustomer;
//[Prompt("Which type of insurance do you need?")]
public InsuranceType InsuranceType;
//[Prompt("Which country are you travelling to?")]
public string TravelDestination;
//[Prompt("Please select one:")]
public InsurancePackage InsurancePackage;
}
public enum IsCurrentCustomer
{
Yes, No
}
public enum InsuranceType
{
Travel, Vehicle, Life
}
public enum InsurancePackage
{
Basic, Standard, Executive
}
public enum WhoIsTravelling
{
Me, Family
}
Run Code Online (Sandbox Code Playgroud)
问题是机器人忽略了每个枚举的第一个选项.它不能在机器人输出的按钮中进行选择,如果你手动输入它,它会说"....不是一个选项".所以我必须使用这样的解决方法:
public enum IsCurrentCustomer
{
IGNORE, Yes, No
}
Run Code Online (Sandbox Code Playgroud)
与此同时,微软的例子没有这个问题.我能做错什么?
枚举中的0值保留给未知值.您可以提供明确的一个或从1开始枚举.
来自他们的示例代码(https://github.com/Microsoft/BotBuilder/blob/master/CSharp/Samples/PizzaBot/Pizza.cs)
您可以将枚举的第一个值明确设置为1,或者在枚举中包含未知值(您正在做什么).
// 1
public enum IsCurrentCustomer
{
IGNORE, Yes, No
}
// 2
public enum IsCurrentCustomer
{
Yes = 1, No
}
Run Code Online (Sandbox Code Playgroud)