C#newbie:找出foreach块中的索引

我有一个foreach块,我想为trace-debug目的绘制foreach内部步骤的索引。 作为一个C#新手我这样做,如下所示:

int i = 1;

foreach (x in y)
{
    ... do something ...
    WriteDebug("Step: "+i.ToString());
    i++;
}

我想知道是否有任何方法可以获取当前步骤索引的值,而无需为此目的明确创建变量。

编辑:澄清,我显然熟悉for循环的选项,但它不是我正在经历的数组,而是一个无序的集合。 编号的原因仅仅是为了在调试级别上显示进度,而没有其他。


不,那里没有。

这是一个你最好使用基本for循环的例子

for(int i = 0; i < y.Count; i++)
{
}

而不是每个循环

编辑 :在回应澄清澄清。

如果您通过一个没有大小属性​​(例如长度或数量)的枚举器进行迭代,那么您的方法就会尽可能清晰。

第二编辑
考虑到我这些天,我会选择马克的回答来做这件事。


与其他一些答案相反,我很乐意将foreach与一个计数器混合(按照问题中的代码)。 这保留了使用IEnumerable[<T>]而不是索引器的能力。

但是如果你想要的话,在LINQ中:

    foreach (var pair in y.Select((x,i) => new {Index = i,Value=x})) {
        Console.WriteLine(pair.Index + ": " + pair.Value);
    }

(问题中的对策方法要简单得多,效率更高,但上面应该更好地映射到像Parallel.ForEach这样的一些场景)。


不,在真正的foreach循环中没有隐式的“counter”。

foreach循环在封面后面做的是创建一个IEnumerator,然后逐个遍历项目,在IEnumerator接口上调用.MoveNext()方法。

有(不幸的是)IEnumerator接口没有暴露的计数器变量 - 只有.Reset()和.MoveNext()方法和一个Current属性(返回当前项)

渣子

链接地址: http://www.djcxy.com/p/52979.html

上一篇: C# newbie: find out the index in a foreach block

下一篇: Getting the array key in a 'foreach' loop