【发布时间】:2013-05-15 19:47:03
【问题描述】:
我遇到了一个代码,它应该返回列表中预期的单个对象,这个代码有一个迭代器块,它产生找到的项目,我在下面的例子中简化了这个例子:
private static void Methode_A()
{
Console.Write("{0} ", NumberList(2, 8).Single());
}
private static IEnumerable<int> NumberList(int min, int max)
{
while (min < max)
yield return min++;
}
将Single() 与yield 结合起来是否有意义或有任何已知的好处,而不是仅仅构建列表并断言它包含一个元素?
【问题讨论】:
-
“虽然我预计代码会在第一个异常(在第二个找到的项目上)后中断,但它会继续运行并在第一个异常之后为所有找到的项目抛出异常。为什么会这样?”抛出第一个异常后,您如何将执行返回到
Single()? -
我认为您的意思是使用
First(),它会产生一个或多个项中的第一个。Single()产生第一个项目,但如果有多个项目则抛出异常。您向我们展示的代码在出现异常后无法“继续运行”。 -
@MatthewWatson 我没有写代码,我在重构类时发现它,它使用的是 Single,猜想有人想省去对项目计数的检查。
-
“继续运行”是什么意思?您向我们展示的代码无法做到这一点!忽略异常并重试的异常处理程序在哪里? ;)
-
@MatthewWatson 以例外的方式忘记它,这是我对调试器行为的错误解释。我编辑了这个问题。
标签: c# performance linq refactoring yield