可能重复:
带有索引的C#foreach
我喜欢在C#中使用foreach的简单性,但我经常需要一个索引。有没有任何方法可以将这些优雅地组合成一个简单的结构,而不需要执行以下操作:
for(var i = 0; i<items.Count; i++) {
var item = items[i];
或
int i = 0;
foreach(var item in items) {
i++;
我会想象一些整洁的东西,比如:
foreach(var item in items;int index) {
是,
我在SO:上找到了一个巧妙的扩展方法
带有索引的foreach
工作原理有点像这样(与前面的答案逐字逐句):
public static void Each<T>( this IEnumerable<T> ie, Action<T, int> action )
{
var i = 0;
foreach ( var e in ie ) action( e, i++ );
}
使用方式如下:
var strings = new List<string>();
strings.Each(( str, n ) =>
{
// hooray can capture 'n' as well as 'str'
});
或:
strings.Each((str, n) => Console.WriteLine(str));