当前位置:  开发笔记 > 编程语言 > 正文

在使用foreach迭代时如何知道行索引?

如何解决《在使用foreach迭代时如何知道行索引?》经验,为你挑选了4个好方法。

在下一个示例中,我如何知道当前行索引?

foreach (DataRow temprow in temptable.Rows)
{
//this.text = temprow.INDEX????
}

Joseph.. 22

你必须自己创建一个

var i = 0;
foreach (DataRow temprow in temptable.Rows)
{
    this.text = i;
    // etc
    i++;
}

或者你可以只做一个for循环.



1> Joseph..:

你必须自己创建一个

var i = 0;
foreach (DataRow temprow in temptable.Rows)
{
    this.text = i;
    // etc
    i++;
}

或者你可以只做一个for循环.


+1,虽然我很少(如果有的话)主张`for`而不是'foreach`.不同的存储机制可以在基于索引的查找(例如链接列表)上执行得非常差,并且在直接枚举上非常好.

2> Jon Skeet..:

我在MiscUtil中有一个类型可以帮助解决这个问题SmartEnumerable.这是一个愚蠢的名字,但它的工作原理:)请参阅用法页面了解详细信息,如果你使用的是C#3,你可以使它更简单:

foreach (var item in temptable.Rows.AsSmartEnumerable())
{
    int index = item.Index;
    DataRow value = item.Value;
    bool isFirst = item.IsFirst;
    bool isLast = item.IsLast;
}



3> adrianbanks..:

如果你可以使用Linq,你可以这样做:

foreach (var pair in temptable.Rows.Cast()
                                   .Select((r, i) => new {Row = r, Index = i}))
{
    int index = pair.Index;
    DataRow row = pair.Row;
}



4> Filip Ekberg..:

你实际上不.foreach的一个优点是你没有额外的代码处理集来增加和检查长度.

如果你想拥有自己的索引,你必须做这样的事情

int rowindex = 0;
foreach (DataRow temprow in temptable.Rows)
{
//this.text = temprow.INDEX????
    this.text = rowindex++;
}

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有