我有行
if(query.GetRecordsFromResults() != null)
RecordsList.AddRange(query.GetRecordsFromResults());
GetRecordsFromResults()
返回IList<IRecord>
的位置。尽管有if条件,我得到System.ArgumentNullException
。那是为什么?
错误的方法:
foreach (var query in QueryList)
{
query.ExecutePreparedQuery();
if(query.GetRecordsFromResults() != null)
RecordsList.AddRange(query.GetRecordsFromResults());
}
QueryList
是List<Query>
,query
是Query
。两者都被实现,实例化和初始化(验证)。
public override IList<IRecords> GetRecordsFromResults()
{
var recordsList = new List<IRecords>();
if (Result != null && Result.Count != 0)
{
RecordBuilder.Value = Result.Count;
RecordBuilder.Querytype = QueryDescription();
RecordBuilder.Dateformatted = DateFormatting();
RecordBuilder.WebTitle = Web.Title;
recordsList.Add(RecordBuilder.BuildRecord());
return recordsList;
}
RecordBuilder.Value = 0;
RecordBuilder.Querytype = QueryDescription();
RecordBuilder.Dateformatted = DateFormatting();
RecordBuilder.WebTitle = Web.Title;
recordsList.Add(RecordBuilder.BuildRecord());
return recordsList;
}
Result
是Query
的属性,在Query.ExecutePreparedQuery
调用期间更新。如果查询失败,它可能为null。
RecordBuilder
是IRecord
实现的构建器,它是一堆字符串和int属性。
QueryDescription
是Query
返回字符串的自描述方法。
DateFormating
返回DateTime
属性中的字符串。
环境不是多线程的,Query
是一个抽象类,显示的GetRecordFromResults
是抽象子类中的覆盖(下面是其他子类是真正的实现)。
答案 0 :(得分:2)
除了你得到的例外,你做的方式是错误的,它会像下面这样;
// Make sure that you have initialized/instantiated RecordsList
var iListResult = query.GetRecordsFromResults();
if(iListResult != null)
{
RecordsList.AddRange(iListResult);
}
显然这将解决您的问题。这是因为(可能是)GetRecordsFromResults()
内发生的事情,这意味着第一次调用返回预期结果(这就是条件评估为真的原因),第二次调用返回null
。