Linq查询无法执行方法

时间:2018-10-09 13:29:32

标签: c# linq

在学习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;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:5)

当方法包含showToast(position: string, message: string) { let toast = this.toastCtrl.create({ message: message, duration: 2000, position: position }); toast.present(toast); } logForm() { console.log(this.userRegister.value); this.utente = this.userRegister.value; this.UtentiService.addUser(this.utente); //controllo se l'utente esiste già this.UtentiService.getSingleUser(this.utente).subscribe( data => { this.risposta = JSON.stringify(data.messaggio); }, error => { console.log(error); }, () => { alert(this.risposta); if (this.risposta === "ko_singoloFound") { this.showToast('bottom', 'Ti sei registrato con successo!'); } if (this.risposta === "ok_singoloFound") { this.showToast('middle', 'Utente già registrato!'); } }); } 语句时,它将成为“迭代器块”。它将被懒惰地评估。这意味着只有在某些客户端枚举返回的yield return之前,该代码才会执行​​。

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

IEnumerable<int>

“折叠”迭代器的另一种方法是仅对返回值调用var results = PrintResults(queryResults); foreach (var result in results) { // do something } 。这将导致它像.ToList()循环那样被枚举:

foreach

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