0

推論エンジンに次のように質問し、結果が返された場合、最初のクエリ (質問はクエリ内の 2 つの Atom で構成されます) の最初のファクトを取得したいと考えています。

strAnswer = IIf(InfEng.RunQuery(Question).Count > 0, InfEng.RunQuery(Question)(0)(0).ToString, "No Answer")

これはエラーをスローします

例外の詳細: System.ArgumentOutOfRangeException: インデックスが範囲外でした。
負ではなく、コレクションのサイズより小さい必要があります。パラメータ名: インデックス"
クエリ カウント = 0 の場合。「ウォッチ」ウィンドウでは、評価結果が 0 になり、評価されたステートメントを開くと、「エラー & 子なし」というメッセージが表示されます。クエリが Facts を返す場合、これは問題なく機能します。

Count の代わりに を代用.Anyしましたが、それも機能しませんでした。

これを standard に変更するとIf-Then-End If、すべての場合で機能します...そして.Count&.Any

私は間違って何をしていますか?

4

1 に答える 1

0

私は VB.NET の専門家ではありませんが、この事実がステートメントInfEng.RunQuery(Question)に 2 回表示されている場合は、クエリが 2 回実行されることを意味します。これが発生するのは望ましくありません。つまり、正当な理由もなくクエリを 2 回実行することです。IIf.Count > 0

InfEng.RunQuery(Question)変数に割り当ててから、この変数をIIfステートメントで使用することをお勧めします。

于 2013-06-23T09:49:05.493 に答える