2017-04-21 34 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

相關問題