迭代列表时出现空引用异常

本文关键字:异常 引用 列表 迭代 | 更新日期: 2023-09-27 18:34:39

我在迭代一组不可为空的对象时遇到空异常。

List<ReconFact> facts = new List<ReconFact>();
// ...populating facts 
int count = 0;
foreach (var fact in facts)
{
  Console.WriteLine(++count);
  try
  {
    context = AddToContext(context, fact, count, 100, true);
  }
  catch (Exception e)
  {
    Console.WriteLine(e.Message); // Null Exception Raised at some point
  }
}

这怎么可能?我不知道迭代列表可以提供空元素是正常行为吗?填充列表时是否可以添加空项目?

迭代列表时出现空引用异常<T>

是的,可以将null添加到T是引用类型的List<T>。没有什么能阻止某人:

List<ReconFact> facts = new List<ReconFact>();
facts.Add(null);

您可以先检查一下:

foreach (var fact in facts.Where(f => f != null))
// ...

是的,List可以包含 null,数组和其他几个集合也可以。它不会破坏迭代本身,但会破坏{ }内依赖于元素不为 null 的任何代码。

List<String> s = new List<String>();
s.Add("foo");
s.Add(null);
s.Add("bar");

编辑:等等,"不可空对象"是什么意思?

我认为问题出在你的逻辑上。您只需初始化名为 fact 的 Recontent 列表。所以它的所有时间都是 0。请检查一下。