我用 IEnumerable 得到序列號 0 ~ 2,當我列印結果時。IEnumerable和IEnumerable.ToList()結果是不同的。
void Main()
{
var numbers = GetNumbers();
Print(numbers);
/*
Return: 0
Print: 0
Return: 1
Print: 1
Return: 2
Print: 2
Return: 0
Return: 1
Return: 2
Total: 3
*/
Print(numbers.ToList());
/*
Return: 0
Return: 1
Return: 2
Print: 0
Print: 1
Print: 2
Total: 3
*/
}
void Print(IEnumerable<int> numbers) {
foreach(var number in numbers)
{
Console.WriteLine($"Print: {number}");
}
Console.WriteLine($"Total: {numbers.Count()}");
}
IEnumerable<int> GetNumbers()
{
return Enumerable.Range(0, 3)
.Select(n =>
{
Console.WriteLine($"Return: {n}");
return n;
});
}
似乎純 IEnumerable linqSelect函式在執行IEnumerable.Count().
這是怎么回事?
uj5u.com熱心網友回復:
當你打電話時numbers.Count(),你IEnumerable又在列舉。因為 IEnumerable 被列舉了兩次,所以 Return 行分別列印了兩次。
串列轉換列舉IEnumerable來構建串列,但之后,只有結果List<int>被Print. 當 .Count()在 List 上呼叫時,它只回傳的內置Count屬性List<int>并且不列舉任何內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/411343.html
標籤:
上一篇:Linq中的日期過濾
