我有一个IEnumerable,我运行foreach。在某些情况下,它在foreach行上抛出一个空引用异常,它说
ienumerable抛出了类型'System.NullReferenceException
的异常
if (ienumerable != null)
{
foreach (var item in ienumerable)
{
......
}
}
我在foreach循环之前进行了一次空检查,并且iEnumerable传递了null检查,但是当我在它上面运行foreach循环时,它会抛出空引用异常。
答案 0 :(得分:3)
迭代器可以在迭代时执行任何操作,包括抛出异常。所以基本上,你需要知道源是什么。例如,这是一个以相同方式抛出的非null迭代器:
var customers = new [] {
new Customer { Name = "abc" },
new Customer { },
new Customer { Name = "def" }
};
IEnumerable<int> lengths = customers.Select(x => x.Name.Length);
直到第二次循环才会失败。所以:看一下迭代器的来源,以及如何实现迭代器。
纯粹是为了好玩,这是另一个同样失败的原因:
IEnumerable<int> GetLengths() {
yield return 3;
throw new NullReferenceException();
}
答案 1 :(得分:0)
你的ienumerable中的项目有时为空,
试试这个:
if (ienumerable != null)
{
foreach (var item in ienumerable)
{
if(item != null)
{
// do stuff
}
}
}
这是一个为你们尝试的例子。
string[] testStr = new string[] { null, "", "test" };
foreach (var item in testStr)
{
if (item != null)
{
Console.WriteLine(item);
}
else
{
Console.WriteLine("item was null");
}
}
Console.ReadKey();