var counter=0;
var array = new int[] {0, 1, 2, 3,4};
var test = array.Select(a => counter++);
foreach (var item in test)
{
Console.WriteLine(item);
}
Console.ReadLine();
コンソール上でコードを実行すると、0,1,2,3,4が出力されます。 しかし、デバッグモードでテストアレイを展開すると、10から14までの数字が表示されます。なぜですか? また、増分カウンタを返すべきであるので、コンソールが1,2,3,4,5を印刷しない理由を教えてください。C#Linqの異なる値が、デバッグモードで表示された値よりも多く表示される
'array.Select(a => counter ++).ToList()'を使うと、これが止まります! – DavidG
質問の2番目の部分については、++のドキュメントを読むことをお勧めします。https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/increment-operator 'counter ++'はインクリメントする前にcounterを返します。 – Chris
デバッグ中に 'test'を複数回列挙しているため、' counter'がインクリメントされます。 – Lee