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