>>180
とんでもなく遅そうだなそれ
わざわざdynamicにする意味がわからない
struct IndexItemPair<TSource> { public int Index { get; } public TSource Item { get; } }
とか返せばいいだろ

foreachにこだわらなくてもこういうのでいいんじゃないの
static void ForEach<TSource>(this IEnumerable<TSource> source, Action<TSource, int> action) {
 int index = 0;
 foreach (TSource item in source) action(item, index++);
}