我遇到了一个应该返回列表中预期的单个对象的代码,这段代码有一个迭代器块,它产生了找到的项目,我简化了以下示例中的情况:
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
组合在一起构建列表并断言它包含一个单独的元素是否有任何意义或是否有任何已知的好处?
答案 0 :(得分:3)
其工作方式如下:
NumberList(2, 8).Single()
while
循环并返回第一个结果(2)。.Single
方法立即抛出异常并停止执行,因为它预计枚举器中只包含一个元素另一方面,如果你在这里打电话NumberList(2, 8).First()
会发生什么:
while
循环并返回第一个结果(2)。while
循环中继续,因为已经返回了一个元素,并且此元素将是调用的结果