无法从'方法组'转换为'ResumeAfter <object>'

Ter*_*gon 5 c# botframework azure-language-understanding

我正在尝试从Luis创建一个子对话框,旨在从用户那里收集更多信息.但是我收到了一个无法从'方法组'转换为'ResumeAfter <object>'上下文的第二个参数的错误消息.

[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);
}
Run Code Online (Sandbox Code Playgroud)

服务器对话框类是

[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);

    }
}
Run Code Online (Sandbox Code Playgroud)

我找到了一个解释说:

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

但是我无法理解这一点.

Eze*_*dib 13

你的对话框实现IDialog<object>但你的ResumeAfter<T>方法ReceiveServerDialog是一个期望一个字符串(在IAwaitable<string> serverName参数中)

更改对话框以实现IDialog<string>或更改您的ReceiveServerDialog方法

private async Task ResumeAfterServerDialog(IDialogContext context, IAwaitable<object> serverName)
Run Code Online (Sandbox Code Playgroud)