我的問題基本上是一個很好的編程習慣。在IEnumerable的情況下,每個項目在ToList的情況下被評估,整個集合在它開始for循環之前被迭代。 根據下面的代碼應該使用哪個函數(GetBool1 vs GetBool2)以及爲什麼。IEnumerable vs List迭代集合
public class TestListAndEnumerable1
{
public static void Test()
{
GetBool1();
GetBool2();
Console.ReadLine();
}
private static void GetBool1()
{
var list = new List<int> {0,1,2,3,4,5,6,7,8,9};
foreach (var item in list.Where(PrintAndEvaluate))
{
Thread.Sleep(1000);
}
}
private static bool PrintAndEvaluate(int x)
{
Console.WriteLine("Hi from " + x);
return x%2==0;
}
private static void GetBool2()
{
List<int> list = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
foreach (var item in list.Where(PrintAndEvaluate).ToList())
{
Thread.Sleep(1000);
}
}
}
GetBool1():通過創建一個枚舉和循環,返回匹配結果和運行代碼塊。 GetBool2():創建一個枚舉器返回匹配結果,將匹配結果複製到新列表中(如果列表是值列表類型,則分配更多內存!),創建枚舉器並遍歷並運行代碼塊。你認爲哪一個更好? – john
欲瞭解更多關於差異,請看[this](https://www.codeproject.com/Articles/829624/Know-your-collections-from-IEnumerable-to-List-and)...? – Noctis