我想這是由於推遲執行,但我會認爲,給定List.AddRange函數接受IEnumerable,它會枚舉要添加的項目。
它的確如此。 ICollection<T>
(在這種情況下你不會碰到)會有短路,這會導致它使用ICollection<T>.CopyTo
而不是枚舉項目,否則它將枚舉集合。
有關工作例如,嘗試:
using System;
using System.Linq;
using System.Collections.Generic;
internal class Program
{
private static List<T> RunQuery<T>(IEnumerable<T> someCollection, Func<T, bool> predicate)
{
List<T> items = new List<T>();
IEnumerable<T> addItems = someCollection.Where(predicate);
items.AddRange(addItems);
return items;
}
static void Main()
{
var values = Enumerable.Range(0, 1000);
List<int> results = RunQuery(values, i => i >= 500);
Console.WriteLine(results.Count);
Console.WriteLine("Press key to exit:");
Console.ReadKey();
}
}
,它使用了確切的代碼,並打印出500(物件的適當數量的List<T>
)。
這是C#,對嗎? – Antimony 2012-07-31 23:53:31
對不起,是的C#(4.0) – John 2012-07-31 23:55:27
你如何看到「沒有項目被添加」,因爲它應該添加項目? – 2012-08-01 00:04:01