【发布时间】:2017-08-13 03:22:37
【问题描述】:
我尝试使用 LinQ Where 扩展函数删除 array 中的前 3 个元素。
这是一个例子:
var array = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
var count = 3;
var deletedTest1 = 0;
var test1 = array.Where(x => ++deletedTest1 > count).ToList();
Console.WriteLine($"{{{String.Join(", ", test1)}}}");
var deletedTest2 = 0;
var test2 = array.Where(x => ++deletedTest2 > count).AsEnumerable();
Console.WriteLine($"{{{String.Join(", ", test2)}}}");
var deletedTest3 = 0;
var test3 = array.Where(x => ++deletedTest3 > count);
Console.WriteLine($"{{{String.Join(", ", test3)}}}");
var deletedTest4 = 0;
var test4 = array.Where(x => ++deletedTest4 > count).ToArray();
Console.WriteLine($"{{{String.Join(", ", test4)}}}");
它工作正常,在每种情况下我都有{ 4, 5, 6, 7, 8, 9 } 导致控制台。
但是在 test2 和 test3 的 Visual Studio 2015 Update 3 中的 watch 情况下,我得到了错误的结果:
谁能解释为什么我使用.ToList() 和.ToArray() 时一切正常,而在其他情况下却错了?
这是错误吗?
【问题讨论】:
-
使用
ToList()和ToArray(),您可以将数据具体化为列表/数组。其他的是IEnumerable,它们有效地承诺运行数据并且您运行它们两次,一次在Console.WriteLine中,一次在您在调试器中查看它们时。没有错误。
标签: watch c# linq visual-studio-2015 closures visual-studio-debugging