首页 > C# > 如何获取 foreach 循环当前迭代的索引?

如何获取 foreach 循环当前迭代的索引?

上一篇 下一篇

在 C# 中是否有一些我没有遇到的罕见语言结构(比如我最近学到的一些,一些关于 Stack Overflow 的语言结构)来获取表示 foreach 循环当前迭代的值?

例如,我目前根据情况做这样的事情:

int i = 0;
foreach (Object o in collection)
{
    // ...
    i++;
}

分割线

网友回答:

用于循环访问实现 的集合。它通过调用集合来实现此目的,该集合将返回 .foreachIEnumerableGetEnumeratorEnumerator

此枚举器具有方法和属性:

  • MoveNext()
  • Current

Current返回枚举器当前所在的对象,并更新到下一个对象。MoveNextCurrent

索引的概念与枚举的概念是陌生的,并且无法完成。

因此,大多数集合都可以使用索引器和 for 循环构造进行遍历。

与使用局部变量跟踪索引相比,我非常喜欢在这种情况下使用 for 循环。

分割线

网友回答:

Ian Mercer在Phil Haack的博客上发布了类似的解决方案:

foreach (var item in Model.Select((value, i) => new { i, value }))
{
    var value = item.value;
    var index = item.i;
}

这将通过使用 LINQ 的重载来获取项 () 及其索引 ():item.valueitem.iSelect

函数 [在 Select 内] 的第二个参数表示源元素的索引。

正在创建一个新的匿名对象。new { i, value }

如果使用 C# 7.0 或更高版本,则可以避免堆分配:ValueTuple

foreach (var item in Model.Select((value, i) => ( value, i )))
{
    var value = item.value;
    var index = item.i;
}

您还可以通过使用自动解构来消除:item.

foreach (var (value, i) in Model.Select((value, i) => ( value, i )))
{
    // Access `value` and `i` directly here.
}

分割线

网友回答:

最后,C#7 有一个不错的语法来获取循环(即元组)内的索引:foreach

foreach (var (item, index) in collection.WithIndex())
{
    Debug.WriteLine($"{index}: {item}");
}

需要一点扩展方法:

using System.Collections.Generic;

public static class EnumExtension {
    public static IEnumerable<(T item, int index)> WithIndex<T>(this IEnumerable<T> self)       
       => self.Select((item, index) => (item, index));
}

模板简介:该模板名称为【如何获取 foreach 循环当前迭代的索引?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【C#】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 413次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 02-18
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
微信素材 自适应 微信文章 微信公众平台 企业网站 单页式简历模板 响应式 html5 微信图片 微信模板
您可能会喜欢的其他模板