2017-04-21 268 views
2

我试图从路易斯意图收集来自用户的附加信息的子对话框。但是我收到无法从“方法组”转换为“ResumeAfter <对象>”的错误消息上的context.Call无法从'方法组'转换为'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); 
} 

服务器对话框类是

[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。

但是我无法理解这一点。

回答

9

你的对话框工具IDialog<object>但你​​方法ReceiveServerDialog是期待一个字符串(在IAwaitable<string> serverName参数)

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

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

我意识到,只是只要你发布这是正确的修复,谢谢 – Teragon

+1

花了我几天的时间来弄清楚这一点 – shabby

相关问题