【发布时间】:2013-10-14 14:30:31
【问题描述】:
我注意到 LINQ 代码中有一些奇怪的行为,并使用两种方法将问题简化为以下最小示例:
IA Find(string n)
{
IA result;
if (!_dictionary.TryGetValue(n, out result))
{
throw Exception();
}
return result;
}
IEnumerable<IA> Find(IEnumerable<string> names)
{
return names.Select(Find).ToArray();
}
这按预期工作。
现在,我删除了 .ToArray(),因此该方法如下所示:
IEnumerable<IA> Find(IEnumerable<string> names)
{
return names.Select(Find);
}
此更改将导致不引发异常,即使某些名称在 _dictionary 中未找到,但存在于 names 参数中。
是什么导致了这种(对我而言)LINQ 的意外行为?
【问题讨论】:
-
延迟执行。执行 Select 时不会迭代结果。