Это может показаться тривиальным для некоторых из вас, но я смущен этими двумя примерами ниже.LINQ над локальными переменными
int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int i = 0;
var simpleQuery =
from num in numbers
select ++i;
foreach (var item in simpleQuery)
{
Console.WriteLine("v = {0}, i = {1}", item, i); // now i is incremented
}
Выходы:
v = 1, i = 1
v = 2, i = 2
v = 3, i = 3
v = 4, i = 4
v = 5, i = 5
v = 6, i = 6
v = 7, i = 7
v = 8, i = 8
v = 9, i = 9
v = 10, i = 10
Он обновляет значение I, и все прекрасно до этого момента. Но когда я пытался обновить элементы массива, он просто не работает.
int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var simpleQuery =
from num in numbers
select ++num;
int i = 0;
foreach (var item in simpleQuery)
{
Console.WriteLine("v = {0}, num = {1}", item, numbers[i++]); // now num is NOT incremented???
}
Выходы:
v = 6, num = 5
v = 5, num = 4
v = 2, num = 1
v = 4, num = 3
v = 10, num = 9
v = 9, num = 8
v = 7, num = 6
v = 8, num = 7
v = 3, num = 2
v = 1, num = 0
Что может быть причиной этого?
Edit: Я думал, что второй пример выведет:
v = 6, num = 6
v = 5, num = 5
v = 2, num = 2
v = 4, num = 4
v = 10, num = 10
v = 9, num = 9
v = 7, num = 7
v = 8, num = 8
v = 3, num = 3
v = 1, num = 1
Ваш код работает нормально. Что ты хочешь делать? 'select ++ i;' не связан ваш массив. Вы просто увеличиваете i для каждого элемента массива чисел –
Запутанная часть состоит в том, что значение i изменяется из-за «select ++ i», но значение num не равно – sotn