无法从用法推断出方法 IDialogStack.Wait<R>(ResumeAfter<R> resume) 的类型参数
The type arguments for method IDialogStack.Wait<R>(ResumeAfter<R> resume) cannot be inferred from the usage
我在我的机器人中使用 IDialog
,我的方法之一由 Bot Framework 通过 context.Wait()
执行,像往常一样有两个参数:
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument)
我想向此方法添加第三个可选参数,如果我直接从代码中的某个位置 运行 此方法(而不是当 Bot Framework 运行 在 context.Wait()
之后并收到来自用户的消息)。
所以我改方法如下:
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument,
bool doNotShowPrompt = false)
因此,现在所有 context.Wait
调用都显示为无效:
如果我从方法声明中删除第三个参数,该错误就会消失。
Visual Studio显示的消息是:
The type arguments for method IDialogStack.Wait(ResumeAfter resume) cannot be inferred from the usage. Try specifying the type arguments explicitly.
我认为这意味着我应该将 context.Wait
称为 context.Wait<SOMETHING>
,但我不知道该写什么而不是 SOMETHING
。
重载,而不是添加可选参数。您的方法签名现在不再满足所需的委托。
例如:
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument, bool doNotShowPrompt)
{
//Original code here
}
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument)
{
return await MainScreenSelectionReceived(context, argument, false);
}
看一下传递给 context.Wait()
的委托的声明方式:
public delegate Task ResumeAfter<in T>(IDialogContext context, IAwaitable<T> result);
您可以看到此方法需要传递一个具有确切签名 MainScreenSelectionReceived(IDialogContext context, IAwaitable<IMessageActivity> argument)
的委托。
您可以创建一个直接调用的重载方法:
MainScreenSelectionReceived(IDialogContext context, IAwaitable<IMessageActivity> argument)
=> MainScreenSelectionReceived(context, argument, false);
MainScreenSelectionReceived(IDialogContext context, IAwaitable<IMessageActivity> argument,
bool doNotShowPrompt)
{
// Do stuff here
}
或将lambda表达式传递给context.Wait()
方法:
context.Wait((c, a) => MainScreenSelectionReceived(c, a, false));
我在我的机器人中使用 IDialog
,我的方法之一由 Bot Framework 通过 context.Wait()
执行,像往常一样有两个参数:
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument)
我想向此方法添加第三个可选参数,如果我直接从代码中的某个位置 运行 此方法(而不是当 Bot Framework 运行 在 context.Wait()
之后并收到来自用户的消息)。
所以我改方法如下:
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument,
bool doNotShowPrompt = false)
因此,现在所有 context.Wait
调用都显示为无效:
如果我从方法声明中删除第三个参数,该错误就会消失。
Visual Studio显示的消息是:
The type arguments for method IDialogStack.Wait(ResumeAfter resume) cannot be inferred from the usage. Try specifying the type arguments explicitly.
我认为这意味着我应该将 context.Wait
称为 context.Wait<SOMETHING>
,但我不知道该写什么而不是 SOMETHING
。
重载,而不是添加可选参数。您的方法签名现在不再满足所需的委托。
例如:
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument, bool doNotShowPrompt)
{
//Original code here
}
public async Task MainScreenSelectionReceived(IDialogContext context,
IAwaitable<IMessageActivity> argument)
{
return await MainScreenSelectionReceived(context, argument, false);
}
看一下传递给 context.Wait()
的委托的声明方式:
public delegate Task ResumeAfter<in T>(IDialogContext context, IAwaitable<T> result);
您可以看到此方法需要传递一个具有确切签名 MainScreenSelectionReceived(IDialogContext context, IAwaitable<IMessageActivity> argument)
的委托。
您可以创建一个直接调用的重载方法:
MainScreenSelectionReceived(IDialogContext context, IAwaitable<IMessageActivity> argument)
=> MainScreenSelectionReceived(context, argument, false);
MainScreenSelectionReceived(IDialogContext context, IAwaitable<IMessageActivity> argument,
bool doNotShowPrompt)
{
// Do stuff here
}
或将lambda表达式传递给context.Wait()
方法:
context.Wait((c, a) => MainScreenSelectionReceived(c, a, false));