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

Azure Search SearchParameters Object reference not set to an instance of an object error

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

代码编译正常?据我所知,不需要构造函数参数。

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

此处:

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

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

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