我嘗試從一個字符串列表中一次取3行,但它不按預期工作。考慮下面的代碼...爲什麼這個可枚舉的列表分裂了?
var listOfStrings = new List<string>
{
"String 1",
"String 2",
"String 3",
"String 4",
"String 5",
"String 6"
};
foreach (var x in listOfStrings.Take(3).ToList())
{
var currRows = x.ToList();
// currRows should have 3 items
foreach (var itm in currRows)
{
}
}
第一運行我期望currRows有3項(字符串1,2和3),第二時間我期望有這些3項(字符串4,5和6) 。但是當我運行這currRows只包含例如「字符串1」,這是逐字符分裂?!
我在這裏錯過了什麼?
這不是'Take'的工作方式。或者任何其他LINQ操作員,真的 - 他們從不*修改*原始集合。您需要使用例如「Take」和「Skip」的組合。 – Luaan
用'foreach(var itm in x)'替換你的第二個循環。不要在字符串上調用'ToList()',因爲它也是'IEnumerable',所以'string.ToList()'返回一個字符列表。其次,在第一個循環中刪除「ToList()」調用,它什麼都不做,並且浪費了CPU和內存。最後,'Take(3)'只會將***前3個項目***,而不是3個。 –
Rob