我试图将搜索字段添加到我的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
代码可以编译吗?据我所知,并不需要构造函数参数。
答案 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");
SearchFields
是List
吗?它是在SearchParameters
构造期间初始化的吗?如果没有,那么在将项目添加到未实例化的对象时,您可以使用NullReferenceException
。
或者在这里:
List<SearchHit> searchHits = results.Results.Select(r => ResultMapper.ToSearchHit(r)).ToList();
在您的results
对象中,您确定Results
实例化了吗?如果没有,NullReferenceException
要查找引发异常的行,请查看代码中的第32行(行号在错误日志中)