迭代List <t> </t>时的空引用异常

时间:2013-10-10 09:12:50

标签: c# .net-4.5

我在迭代一组非可空对象时得到一个null异常。

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
  }
}

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

3 个答案:

答案 0 :(得分:4)

是的,可以将null添加到List<T>T是参考类型。什么都不能阻止某人:

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

你可以先检查一下:

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

答案 1 :(得分:2)

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

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

编辑:等等,“非可空对象”是什么意思?

答案 2 :(得分:0)

我认为问题在于你的逻辑。您只需初始化名为fact的Recontent列表。 所以它的计数一直都是0.请检查一下。