元のループのインクリメント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));