【问题标题】:Cannot convert from 'method group' to 'ResumeAfter<object>'无法从“方法组”转换为“ResumeAfter<object>”
【发布时间】:2017-09-18 21:33:58
【问题描述】:

我正在尝试根据 Luis 意图创建一个子对话框,以从用户那里收集更多信息。但是,我在 context.Call 的第二个参数上收到 Cannot convert from 'method group' to 'ResumeAfter' 错误消息

[LuisIntent("Login")]
public async Task LoginIntent(IDialogContext context, LuisResult result)
{
    var serverdialog = new ServerDialog();
    await context.Call(serverdialog, ResumeAfterServerDialog); //error here
}

private async Task ResumeAfterServerDialog(IDialogContext context, IAwaitable<string> serverName)
{
    this.serverAddress = await serverName;
    await context.PostAsync($"you've entered {this.serverAddress}");
    context.Wait(MessageReceived);
}

服务器对话框类是

[Serializable]
public class ServerDialog : IDialog<object>
{
    public async Task StartAsync(IDialogContext context)
    {
        await context.PostAsync("Enter your server's name (example: 10.10.10.52)");
        context.Wait(ReceiveServerDialog);
    }

    public async Task ReceiveServerDialog(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
        IMessageActivity message = await result;
        context.Done(message.Text);

    }
}

我找到了一个解释:

MessageReceived 的第二个参数的类型可能是 IAwaitable,但您需要一个带有第二个参数 IAwaitable 的方法,例如,如果您将 null 作为结果值传递并且您的子对话框的类型是 IDialog。

但是我无法理解这一点。

【问题讨论】:

    标签: c# botframework azure-language-understanding


    【解决方案1】:

    您的对话框实现了IDialog&lt;object&gt;,但您的ResumeAfter&lt;T&gt; 方法ReceiveServerDialog 是一个期望字符串(在IAwaitable&lt;string&gt; serverName 参数中)

    更改您的对话框以实现IDialog&lt;string&gt; 或将您的ReceiveServerDialog 方法更改为

    private async Task ResumeAfterServerDialog(IDialogContext context, IAwaitable<object> serverName)
    

    【讨论】:

    • 我意识到您一发布这是正确的解决方法,谢谢
    • 我花了好几天才弄明白这个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    相关资源
    最近更新 更多