我在vb.net项目的https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-formflow教程之后遇到了一个问题。
特别围绕"将表单连接到框架"存在以下代码的地方。
internal static IDialog<SandwichOrder> MakeRootDialog()
{
return Chain.From(() => FormDialog.FromForm(SandwichOrder.BuildForm));
}
我在我的vb.net中有哪些
Friend Shared Function MakeRootDialog() As IDialog(Of SandwichOrder)
Return Chain.From(Function() FormDialog.FromForm(Of IForm(Of SandwichOrder))(SandwichOrder.BuildForm))
End Function
突出显示的错误是FromForm
必须有一个公共无参数实例构造函数来满足&#39; New&#39;类型参数的约束&#39; T&#39;。
这对我来说很有意义,因为IForm显然有。
受保护的子新()
我经常不会#,但我无法弄清楚它为什么在那里工作并且没有返回相同的错误,特别是因为c#中的构造函数是。
受保护的IForm();
我认为我正在创建一个新的课程实例,在c#中我们不是......但我无法弄清楚为什么会这样。< / p>
有人有线索吗?
修改
在c#中,以下工作
return Chain.From(() => FormDialog.FromForm(SandwichOrder.BuildForm));
以下情况并非如此,即使它们相同但具有正确的类型参数。
return Chain.From(() => FormDialog.FromForm<IForm<SandwichOrder>>(SandwichOrder.BuildForm));
我没有使用等效的vb
Return Chain.From(Function() FormDialog.FromForm(SandwichOrder.BuildForm))
我是否收到以下错误。
方法中的类型参数不能从这些参数中推断出来。明确指定数据类型可能会纠正此错误。
我按照说明操作,这显然导致了上面的错误,可能是一个红色的鲱鱼。显然,我还有另外一个问题需要弄清楚,为什么在vb.net中它认为函数的返回并不相同。
Buildform非常简单,只是。
Public Shared Function BuildForm() As IForm(Of SandwichOrder)
Return New FormBuilder(Of SandwichOrder)().Message("Welcome to the simple sandwich order bot!").Build()
End Function
答案 0 :(得分:0)
想出来。
问题是BuildFormDeligate - 没有隐式返回FromForm的预期类型。解决方案是简单地创建对象并将其传入。奇怪的是因为我不需要在c#中执行此操作但是嘿嘿。
Dim BuildFormDeligate As New BuildFormDelegate(Of SandwichOrder)(AddressOf SandwichOrder.BuildForm)
Return Chain.From(Function() FormDialog.FromForm(BuildFormDeligate))