public static void For<T>(this IEnumerable<T> items, Action<T, int> predicate)
{
using (IEnumerator<T> iterator = items.GetEnumerator())
{
int index = 0;
while (iterator.MoveNext())
{
T item = iterator.Current;
predicate(item, index);
index++;
}
}
}
私はリストを列挙し、forループのようなコレクションのインデックスを使ってアクションを実行するlinq拡張で取り入れています。Forループを置き換えるカスタムLinq拡張子
あなたはこの
items.For((item, index) => item.Prop = item.Prop != MyMethod(index) ? MyMethod(index) : item.Prop);
のような方法を使用することができ、これは右のように見えるのか?
をあなたがループしながら、2を使用しているのはなぜ?あなたが2番目のループに来るまでにiterator.MoveNext()は常に偽になるでしょう... –
私は自分のコードを編集しました。私は例としてskipwhileを使用していました。 – Steve
おそらく 'Action'の名前を他のものに '述語'を付ける。 C#の「述語」は、具体的には、真または偽を返すメソッドを意味します。これは真理値テストです。上記のコードでは、 '述語'は 'T'のインスタンスと' IEnumerable 'のその項目のインデックスを取るアクションとして使用されています。ただ普通の 'Action action'がより適切かもしれません。 –
matt