2017-11-07 6 views
1

私は、vb.netプロジェクトのhttps://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-formflowのチュートリアルの1つの問題に遭遇しました。vb.netでMicrosoft bot FormFlowを作成できますか?

具体的には、次のコードが存在する「フォームをフレームワークに接続する」の周りにあります。私は、エラーが強調され、私vb.netで

Friend Shared Function MakeRootDialog() As IDialog(Of SandwichOrder) 
    Return Chain.From(Function() FormDialog.FromForm(Of IForm(Of SandwichOrder))(SandwichOrder.BuildForm)) 
End Function 

を持って

internal static IDialog<SandwichOrder> MakeRootDialog() 
{ 
    return Chain.From(() => FormDialog.FromForm(SandwichOrder.BuildForm)); 
} 

はFromForm

はタイプの「新規」の制約を満たすために公共のパラメータなしのインスタンスコンストラクタを持たなければならないということですパラメータ 'T'。

私には意味がありますが、それは明らかに明らかです。

サブ新(保護

私は非常に多くの場合、C#のはないが、それが動作し、特にC#でコンストラクタ以来、同じエラーを返さない理由を私は理解できませんです。

protected IForm();

私はクラスの新しいインスタンスを作成していると思っていますが、ここではC#ではありません。しかし、なぜそうなるのか分かりません。

誰か手がかりはありますか?

編集:C#で次のように動作している間

return Chain.From(() => FormDialog.FromForm(SandwichOrder.BuildForm)); 

以下は、彼らは同じですが、正しい型パラメータであるにもかかわらず、しません。

 return Chain.From(() => FormDialog.FromForm<IForm<SandwichOrder>>(SandwichOrder.BuildForm)); 

私は

Return Chain.From(Function() FormDialog.FromForm(SandwichOrder.BuildForm)) 

同等のVBを使用していなかった理由は、私は次のエラーを取得するということでした。

メソッドの型パラメータは、これらの引数から推論できません。明示的にデータ型を指定すると、このエラーが修正される可能性があります。

私は指示に従いましたが、これは明らかに上記のエラーを引き起こし、赤いニシンかもしれません。どうやら、私は別の問題を把握するために、なぜ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

問題はBuildFormDeligateでした。FromFormの予想される型は暗黙的に返されませんでした。解決策は単にオブジェクトを作成して渡すことでした。私はC#でこれを行う必要はありませんでしたが、ちょっとホーです。

Dim BuildFormDeligate As New BuildFormDelegate(Of SandwichOrder)(AddressOf SandwichOrder.BuildForm) 

Return Chain.From(Function() FormDialog.FromForm(BuildFormDeligate)) 
関連する問題