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

问题描述 投票:1回答:2

我正在尝试将搜索字段添加到我的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

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

c# botframework azure-search
2个回答
1
投票

SearchFields没有被SearchParameters构造函数初始化(参见源代码here),因此在其上调用Add将导致NullReferenceException。它的类型为IList,因此初始化它的最简单方法是为其分配一个数组,如下所示:

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

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行(行号在错误日志中)

© www.soinside.com 2019 - 2024. All rights reserved.