Приращение в исходном цикле foreach
не повлияет на содержимое массива, единственным способом сделать это остается цикл for
:
for(int i = 0; i < intArray.Length; ++i)
{
if(intArray[i] > 3) ++intArray[i];
}
Linq не предназначен для изменения существующих коллекций или последовательностей. Создает новые последовательности на основе существующих. С помощью Linq можно достичь вышеуказанного кода, хотя это немного противоречит его целям:
var newArray1 = from i in intArray select ((i > 3) ? (i + 1) : (i));
var newArray2 = intArray.Select(i => (i > 3) ? (i + 1) : (i));
Использование where
(или эквивалент), как показано в некоторых других ответах, исключит любые значения, меньшие или равные 3, из полученной последовательности.
var intArray = new int[] { 10, 1, 20, 2 };
var newArray = from i in intArray where i > 3 select i + 1;
// newArray == { 11, 21 }
Существует метод ForEach
для массивов, который позволит вам использовать лямбда-функцию вместо foreach
блока, хотя для чего-то большего, чем вызов метода, я бы придерживался foreach
.
intArray.ForEach(i => DoSomething(i));