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