gpt4 book ai didi

c# - Linq 查询无法执行方法

转载 作者:行者123 更新时间:2023-12-03 22:02:12 27 4
gpt4 key购买 nike

在学习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<int> query =
// from score in scores
// where score % 2 == 0
// select score;
// Console.WriteLine(score);

IEnumerable<int> queryResults = scores.Where(x => x % 2 == 0).ToList().Take(2);
PrintResults(queryResults);
}

static IEnumerable<int> PrintResults(IEnumerable<int> input)
{
foreach (var score in input)
{
Console.WriteLine(score);
yield return score;
}
}
}
}

最佳答案

当方法包含yield return时语句,它变成一个“迭代器 block ”。它将被懒惰地评估。这意味着代码将不会执行,直到某些客户端枚举 IEnumerable<int>返回。

要查看结果,请像这样调用它:

var results = PrintResults(queryResults);
foreach (var result in results)
{
// do something
}

“折叠”迭代器的另一种方法是调用 .ToList()关于返回值。这将导致它被枚举,就像 foreach 一样。循环的作用是:

var results = PrintResults(queryResults).ToList();

Jon Skeet 更详细地描述了迭代器 block here .

关于c# - Linq 查询无法执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52722290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com