为了账号安全,请及时绑定邮箱和手机立即绑定

使用术语属性来控制每个项目栏的选择

使用术语属性来控制每个项目栏的选择

C#
DIEA 2021-07-06 11:39:42
我正在试验 Bot Framework 教程附带的 Sandwich Order 示例。在该示例代码中,有一个SandwichOrder包含用于存储浇头的列表属性的类。public enum ToppingOptions{    [Terms("except", "but", "not", "no", "all", "everything")]    Everything = 1,    Avocado, BananaPeppers, Cucumbers, GreenBellPeppers, Jalapenos,    Lettuce, Olives, Pickles, RedOnion, Spinach, Tomatoes}[Serializable]public class SandwichOrder{    [Prompt("Which {&} would you like? {||}")]    [Describe("toppings")]    public List<ToppingOptions> Toppings;    public static IForm<SandwichOrder> BuildForm()    {        return new FormBuilder<SandwichOrder>()            .Message("Welcome to the simple sandwich order bot!")            .Build();    }};我正在试验该Terms属性,如此处所述FormFlow 的高级功能当我在模拟器中运行机器人时,选择浇头的问题按预期出现......我像这样输入我的选择......结果不是我所期望的。机器人总结了我的选择是这样的......根据教程,结果应该是......我不清楚我在这里哪里出错了。有人可以帮我吗?
查看完整描述

1 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

事实上,我认为您错过了本教程的一部分。您需要在构建器中添加代码来处理“一切”和“但是”这个词。


下面的代码显示了如何为这个词做所有的事情。


.Field(nameof(Toppings),

                validate: async (state, value) =>

                {

                    var values = ((List<object>)value).OfType<ToppingOptions>();

                    var result = new ValidateResult { IsValid = true, Value = values };

                    if (values != null && values.Contains(ToppingOptions.everything))

                    {

                        result.Value = (from ToppingOptions topping in Enum.GetValues(typeof(ToppingOptions))

                                        where topping != ToppingOptions.everything && !values.Contains(topping)

                                        select topping).ToList();


                        value = result.Value;

                    }

                    return result;

                })


查看完整回答
反对 回复 2021-07-10
  • 1 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信