首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C#新手:查找foreach块中的索引

C#新手:查找foreach块中的索引
EN

Stack Overflow用户
提问于 2009-07-28 07:39:52
回答 7查看 25.9K关注 0票数 18

我有一个foreach块,为了进行跟踪调试,我想在其中绘制foreach内部步骤的索引。作为一名C#新手,我这样做:

int i = 1;

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

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

编辑:为了澄清,我显然熟悉for循环的选项,但是我正在处理的不是一个数组,而是一个无序集合。编号的目的只是为了显示调试级别的进度,而不是其他。

EN

回答 7

Stack Overflow用户

发布于 2009-07-28 07:53:12

与其他一些答案相反,我非常乐意将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这样的几个场景)。

票数 24
EN

Stack Overflow用户

发布于 2009-07-28 07:42:17

不,在foreach循环中没有隐式的“计数器”,真的。

foreach循环在幕后执行的操作是创建一个IEnumerator,然后调用IEnumerator接口上的.MoveNext()方法,逐个循环遍历这些项。

(不幸的是?)没有在IEnumerator接口上公开计数器变量-只有.Reset()和.MoveNext()方法和Current属性(返回当前项)

Marc

票数 5
EN

Stack Overflow用户

发布于 2009-07-28 07:42:08

不,没有办法在foreach循环中得到它。对于这种情况,您应该使用For循环,或者,正如您所提到的,显式地创建一个用于计数的变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1192447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档