C# 将foreach与索引相结合

C# 将foreach与索引相结合,c#,C#,可能重复: 我喜欢在C#中使用foreach的简单性,但我经常需要索引。是否有任何方法可以将这些优雅地组合成一个简单的结构,而无需执行以下操作: for(var i = 0; i<items.Count; i++) { var item = items[i]; 我会想象一些整洁的东西,比如: foreach(var item in items;int index) { 对 我在这里找到了一个简洁的扩展方法,因此: 工作原理有点像这样(与前面的答案一字不差): foreach

可能重复:

我喜欢在C#中使用foreach的简单性,但我经常需要索引。是否有任何方法可以将这些优雅地组合成一个简单的结构,而无需执行以下操作:

for(var i = 0; i<items.Count; i++) {
    var item = items[i];
我会想象一些整洁的东西,比如:

foreach(var item in items;int index) {

我在这里找到了一个简洁的扩展方法,因此:

工作原理有点像这样(与前面的答案一字不差):


foreach(items中的var项){return items.index}。。像这样的东西除了samantic糖果,还有什么好处?For循环用于索引访问,ForEach用于对象访问-ForEach不允许在循环期间更改集合,而For循环允许。更好的解决方案(如果可用的话)是在ForEach项上使用一个简单的变量来返回其索引,但我猜这会强制ForEach上的索引顺序。是的,似乎是重复的。我该怎么办?删除问题?那么这是一个重复的问题;)将是更具说服力的解决方案。。。。
foreach(var item in items;int index) {
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));