array
の最初の3つの要素をLinQ Where
拡張機能で削除しようとしています。ここでLinq VS Watchでローカルカウンタクロージャの結果が異なる場合
は一例です:
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 }
結果を持っています。
しかしwatchでのVisual Studio 2015の更新test2
3とtest3
場合には、私は間違った結果があります。
を私は他のケースで.ToList()
と.ToArray()
と間違って使用する場合、すべてがOKである理由を誰もが説明できます?
このバグはありますか?
を)'あなたが/リストにデータをマテリアライズされていますアレイ。他のものは実質的にデータを実行することを約束している 'IEnumerable'であり、' Console.WriteLine'に1回、デバッガでそれらを表示すると2回実行しています。バグはありません。 – DavidG