Azure搜索SearchParameters对象引用未设置为对象错误的实例

时间:2018-09-03 00:51:17

标签: c# botframework azure-search

我试图将搜索字段添加到我的Azure搜索查询中(请参见下面SearchParameters对象的实例化。)

    public async Task StartAsync(IDialogContext context)
    {
        ISearchIndexClient indexClient = CreateSearchIndexClient();
        try
        {
            Trace.TraceInformation($"Starting StartAsync");
            SearchParameters searchParameters = new SearchParameters();
            searchParameters.SearchFields.Add("StoreNumber");
            searchParameters.SearchFields.Add("StoreName");
            Trace.TraceInformation($"Finished adding search fields");
           // Trace.TraceInformation($"Search Parameters added = {searchParameters.SearchFields.Count}");

            DocumentSearchResult results = await indexClient.Documents.SearchAsync(searchText, searchParameters);
            Trace.TraceInformation($"results obtained");

            List<SearchHit> searchHits = results.Results.Select(r => ResultMapper.ToSearchHit(r)).ToList();
            Trace.TraceInformation($"search hits {searchHits.Count}");
            await SendResultsOfSearch(context, results);
        }
        catch (Exception ex)
        {
            Trace.TraceError($"Exception {ex.ToString()}");
        }
    }

由于某种原因,它引发了以下异常,但我不知道为什么?

2018-09-03T00:47:39  PID[3268] Information Starting StartAsync
2018-09-03T00:47:39  PID[3268] Error       Exception System.NullReferenceException: Object reference not set to an instance of an object.
   at LuisBot.Dialogs.SearchRBMDialog.<StartAsync>d__2.MoveNext() in C:\Users\jmatson\Downloads\retail-info-bot-v2-src\Dialogs\SearchRBMDialog.cs:line 32

代码可以编译吗?据我所知,并不需要构造函数参数。

2 个答案:

答案 0 :(得分:1)

SearchFields未由SearchParameters构造函数初始化(请参见源代码here),因此对其调用Add将得到NullReferenceException。它的类型为IList,因此初始化它的最简单方法是为其分配一个数组,如下所示:

searchParameters.SearchFields = new[] { "StoreNumber", "StoreName" };

答案 1 :(得分:0)

多种可能性(取决于您的对象实现)

这里:

SearchParameters searchParameters = new SearchParameters();
searchParameters.SearchFields.Add("StoreNumber");
searchParameters.SearchFields.Add("StoreName");

SearchFieldsList吗?它是在SearchParameters构造期间初始化的吗?如果没有,那么在将项目添加到未实例化的对象时,您可以使用NullReferenceException

或者在这里:

List<SearchHit> searchHits = results.Results.Select(r => ResultMapper.ToSearchHit(r)).ToList();

在您的results对象中,您确定Results实例化了吗?如果没有,NullReferenceException

要查找引发异常的行,请查看代码中的第32行(行号在错误日志中)