0
多くの質問をユーザーに継続的に聞きたいと思います。私はそれを実装するためにPromptDialog.Choice()を使用したいが、私はこれを好きなら、第2のユーザ情報は、最初のコールバック関数を呼び出すので、私はどのように関数から飛び出すのか分からない。私はPromptDialog.choiceを継続的に使用して、ボットフレームワークの多くの関連情報を尋ねることができます
public void getchoose(IDialogContext context)
{
List<string> option_provide = null;
bool if_find = true;
foreach (var i in question.GetSortedProperties())
{
nowchoice = i;
if (!question.select<test_tableinfo>(i.Name, (string)i.GetValue(question), allOptions, out allOptions, out option_provide))
{
if (allOptions.Count() == 1)
{
context.PostAsync(allOptions.First().answer);
if_find = false;
context.Wait(MessageReceived);
}
if (option_provide.Count() < 1)
{
context.PostAsync("请联系客服");
if_find = false;
}
else if (option_provide.Count() == 1)
{
i.SetValue(question, option_provide[0]);
question.select(i.Name, (string)i.GetValue(question), allOptions, out allOptions, out option_provide);
}
else
{
PromptDialog.Choice<string>(context, AfterChoose, option_provide, "选择你需要的"+i.Name, "retry", 2);
if_find = false;
break;
}
}
}
if (if_find)
{
foreach (var i in allOptions)
{
context.PostAsync(i.answer);
}
context.Wait(MessageReceived);
}
}
と私は変数の順序を取得するためにここにリフレクションを使用
public async Task AfterChoose(IDialogContext context, IAwaitable<string> choice)
{
try
{
string temp = await choice;
if (temp != null)
nowchoice.SetValue(question, temp);
}
catch (Exception)
{
}
context.Reset();
getchoose(context);
}
afterchooseコールバック関数が、それは