2

我遇到了一个代码,它应该返回列表中预期的单个对象,这个代码有一个迭代器块,它产生找到的项目,我在下面的例子中简化了这种情况:

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仅仅构建列表并断言它包含一个单一元素相结合是否有任何意义或是否有任何已知的好处?

4

1 回答 1

3

其工作方式如下:

  1. 你打电话NumberList(2, 8).Single()
  2. 执行流程第一次进入while循环并返回第一个结果(2)。
  3. 执行流程在循环的第二次迭代中继续,并返回第二个元素 (3)
  4. .Single方法立即抛出异常并停止执行,因为它期望枚举器中只包含一个元素

另一方面,如果你打电话给NumberList(2, 8).First()这里会发生什么:

  1. 执行流程第一次进入while循环并返回第一个结果(2)。
  2. 执行流程不再在while循环中继续,因为已经返回了一个元素,并且该元素将是调用的结果
于 2013-05-21T06:17:35.500 回答