作者:圈儿丫头1986 | 来源:互联网 | 2022-12-02 17:35
在学习Linq时,我编写了下面的代码,问题是"PrintResults()"方法永远不会被执行.我不明白为什么!?我想做的是什么?
谢谢.
using System;
using System.Collections.Generic;
using System.Linq;
namespace Linq
{
class Program
{
static void Main(string[] args)
{
int[] scores = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//IEnumerable query =
// from score in scores
// where score % 2 == 0
// select score;
// Console.WriteLine(score);
IEnumerable queryResults = scores.Where(x => x % 2 == 0).ToList().Take(2);
PrintResults(queryResults);
}
static IEnumerable PrintResults(IEnumerable input)
{
foreach (var score in input)
{
Console.WriteLine(score);
yield return score;
}
}
}
}
Matt Dillard..
5
当方法包含yield return
语句时,它将成为"迭代器块".它会被懒惰地评估.这意味着代码将不会执行,直到某些客户端枚举IEnumerable
返回的代码.
要查看结果,请像这样调用它:
var results = PrintResults(queryResults);
foreach (var result in results)
{
// do something
}
"崩溃"迭代器的另一种方法就是调用.ToList()
返回值.这将导致它被枚举就像foreach
循环一样:
var results = PrintResults(queryResults).ToList();
乔恩斯基特介绍迭代块更详细地在这里.
1> Matt Dillard..:
当方法包含yield return
语句时,它将成为"迭代器块".它会被懒惰地评估.这意味着代码将不会执行,直到某些客户端枚举IEnumerable
返回的代码.
要查看结果,请像这样调用它:
var results = PrintResults(queryResults);
foreach (var result in results)
{
// do something
}
"崩溃"迭代器的另一种方法就是调用.ToList()
返回值.这将导致它被枚举就像foreach
循环一样:
var results = PrintResults(queryResults).ToList();
乔恩斯基特介绍迭代块更详细地在这里.