带索引的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
} );
或者考虑到类似break
的行为:
public static bool Each<T>( this IEnumerable<T> ie, Func<T, int, bool> action )
{
int i = 0;
foreach ( T e in ie ) if( !action( e, i++ ) ) return false;
return true;
}
var strings = new List<string>() { "a", "b", "c" };
bool iteratedAll = strings.Each( (str, n) ) =>
{
if( str == "b" ) return false;
return true;
} );
您可以执行以下操作
foreach ( var it in someCollection.Select((x,i) => new { Value = x, Index=i }) )
{
if ( it.Index > SomeNumber) //
}
这将为收集中的每个条目创建一个匿名类型值。 它将有两个属性
C#foreach没有内置索引。 您需要在foreach循环外部添加一个整数并每次增加一个整数。
int i = -1;
foreach (Widget w in widgets)
{
i++;
// do something
}
或者,您可以使用标准for循环,如下所示:
for (int i = 0; i < widgets.Length; i++)
{
w = widgets[i];
// do something
}
链接地址: http://www.djcxy.com/p/52963.html
上一篇: foreach with index
下一篇: Existing LINQ extension method similar to Parallel.For?