Linq Where local counter closure different results in VS watch

Viewed 91

I try to delete first 3 elements in array with LinQ Where extension function.

Here is an example:

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)}}}");

It works fine and in each case i have { 4, 5, 6, 7, 8, 9 } result in console.

But in in Visual Studio 2015 Update 3 in test2 and test3 case I have wrong result:

enter image description here

Can anyone explain why everything is ok when I use .ToList() and .ToArray() and wrong in other cases?

Is that bug?

1 Answers
Related