当前位置: 首页 > ai >正文

C# foreach 循环中获取索引的完整方案

一、手动维护索引变量

实现方式‌:
在循环外部声明索引变量,每次迭代手动递增:

int index = 0; foreach (var item in collection) { Console.WriteLine($"{index}: {item}"); index++; } 

特点‌:

  • 简单直接,无需引入额外依赖12。
  • 需注意线程安全及变量作用域问题。

二、LINQ Select + 元组解构

实现方式‌:
利用 LINQ 的 Select 方法将元素与索引绑定为元组(C# 7.0+ 支持元组解构语法):

foreach (var (item, index) in collection.Select((value, i) => (value, i))) { Console.WriteLine($"{index}: {item}"); } 

特点‌:

  • 代码简洁,避免手动维护索引13。
  • 需引入 System.Linq 命名空间。

三、扩展方法封装索引

实现方式‌:
自定义扩展方法 WithIndex,将集合元素与索引打包返回:

public static class EnumerableExtensions { public static IEnumerable<(T item, int index)> WithIndex<T>(this IEnumerable<T> source) { return source.Select((item, index) => (item, index)); } } // 调用 foreach (var (item, index) in collection.WithIndex()) { Console.WriteLine($"{index}: {item}"); } 

特点‌:

  • 增强代码复用性,适用于频繁获取索引的场景3。

四、使用 for 循环替代

实现方式‌:
若需直接操作索引,可改用 for 循环:

for (int i = 0; i < collection.Count; i++) { var item = collection[i]; Console.WriteLine($"{i}: {item}"); } 

特点‌:

  • 直接访问索引,适用于支持索引器的集合(如数组、List<T>)57。
  • 无法用于不支持索引器的集合(如 IEnumerable<T>)。

方法对比与适用场景

方法适用场景优点限制
手动维护索引变量简单场景,无需复杂依赖无额外依赖,灵活需手动管理,易出错
LINQ + 元组解构需要简洁语法且支持 C# 7.0+ 的项目代码紧凑依赖 LINQ,性能略低
扩展方法高复用性需求可复用,代码结构清晰需预先定义扩展类
for 循环替代支持索引器的集合(数组、List<T>等)直接高效不适用于 IEnumerable<T>

操作建议‌:

  • 优先选择 ‌LINQ + 元组解构‌ 或 ‌扩展方法‌,以保持代码简洁性和可维护性13。
  • 对性能敏感的场景,改用 for 循环或手动维护索引57。
http://www.xdnf.cn/news/1186.html

相关文章:

  • PCIe体系结构学习入门——PCI总线概述(一)PCI 总线的基础知识
  • [预备知识]4. 概率基础
  • 关于ubuntu密码正确但是无法登录的情况
  • Android-KeyStore安全的存储系统
  • P3909 异或之积 解题报告
  • QML FontDialog:使用FontDialog实现字体选择功能
  • 【重走C++学习之路】16、AVL树
  • Java练习——day3
  • qemu如何支持vmovdqa64指令(百度AI)
  • 游戏工作室为何要更换IP进行多开?工作室使用代理IP要注意什么?
  • 35.编写一个简单的Mybatis插件
  • ​​电商系统用户需求报告(示例)
  • 随着ai技术的应用,及玩具类产品的层出不穷,开发此类产品的情感AI算法技术的底层构架,及情感AI算法的应用场景是转型的比较好的一个方向
  • HTTP状态码有哪些常见的类型?
  • 三网通电玩城平台系统结构与源码工程详解(四):子游戏集成与服务器调度机制全解
  • Spring AOP + Logback + MDC全链路日志追踪
  • 三线服务器通常适用于哪些用户?
  • GPIO(通用输入输出端口)详细介绍
  • 【T2I】TOKENCOMPOSE: Text-to-Image Diffusion with Token-level Supervision
  • 【2025最新面试Java八股】Java虚拟线程怎么回事,是协程吗?
  • 解决开启代理时无法正常使用Microsoft Store, OneDrive, Outlook等应用的问题
  • 构建“穿戴+云端”落水应急响应体系,为海上作业人员打造全天候、全场景的安全守护网
  • 三网通电玩城平台系统结构与源码工程详解(三):控制台与银商权限模块设计
  • 互联网大厂Java面试:从基础到进阶的技术点探讨
  • 108. 将有序数组转换为二叉搜索树
  • Python——入门... ...
  • 突破 RAG 检索瓶颈:Trae+MCP 构建高精度知识库检索系统实践
  • 嘻游组件解密工具实战教程:资源解包与UI替换全流程
  • 一目十行阅读法
  • 航电系统自适应与容错机制要点