.NET 帮助 C# foreach 及索引(开发者用法) Jacob Mellor 已更新:2025年7月22日 下载 IronPDF NuGet 下载 DLL 下载 Windows 安装程序 免费试用 LLM副本 LLM副本 将页面复制为 Markdown 格式,用于 LLMs 在 ChatGPT 中打开 向 ChatGPT 咨询此页面 在双子座打开 向 Gemini 询问此页面 在 Grok 中打开 向 Grok 询问此页面 打开困惑 向 Perplexity 询问有关此页面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 复制链接 电子邮件文章 在 C# 中,foreach 语句 通常用于遍历数组、列表或其他可枚举类型的集合。然而,foreach 循环的一个限制是没有提供内置的索引变量来跟踪当前迭代。 开发人员通常需要访问当前元素的索引。 下面,我们将探讨实现此功能的各种方法以及 IronPDF 库。 foreach 循环的基础 foreach 循环旨在简化通过数组、列表、字典和实现 IEnumerable 的其他类型的迭代。 下面是如何使用 foreach 语句遍历整数数据类型数组的基本示例: int[] numbers = { 10, 20, 30, 40 }; foreach (int number in numbers) { Console.WriteLine(number); } int[] numbers = { 10, 20, 30, 40 }; foreach (int number in numbers) { Console.WriteLine(number); } $vbLabelText $csharpLabel 在此示例中,number 表示集合在每次迭代中的元素。 循环会自动遍历数组中的所有元素。 然而,没有内置的方法可以访问当前元素的索引。 在 foreach 循环中处理索引 虽然 C# 没有在 foreach 循环中直接提供索引,但几种技术可以解决这个问题。 让我们详细讨论这些方法。 方法 1:使用单独的变量 获取当前元素索引的最简单方法之一是使用外部索引变量。 您需要在循环内部手动递增它: int[] numbers = { 10, 20, 30, 40 }; int numberIndex = 0; foreach (int number in numbers) { Console.WriteLine($"Index: {numberIndex}, Value: {number}"); numberIndex++; } int[] numbers = { 10, 20, 30, 40 }; int numberIndex = 0; foreach (int number in numbers) { Console.WriteLine($"Index: {numberIndex}, Value: {number}"); numberIndex++; } $vbLabelText $csharpLabel 在此代码中,索引变量在循环开始前初始化,然后在每次迭代中在循环内递增。 虽然这种方法有效,但需要手动维护索引,这并不总是理想的。 方法 2:使用 LINQ 的 Select 方法 LINQ 的 Select 方法可用于将集合中的每个元素投影成新的形式,包括其索引。 下面是一个例子: int[] numbers = { 10, 20, 30, 40 }; foreach (var item in numbers.Select((value, index) => new { value, index })) { Console.WriteLine($"Index: {item.index}, Value: {item.value}"); } int[] numbers = { 10, 20, 30, 40 }; foreach (var item in numbers.Select((value, index) => new { value, index })) { Console.WriteLine($"Index: {item.index}, Value: {item.value}"); } $vbLabelText $csharpLabel 在此示例中,Select 创建一个包含当前元素的值及其索引的匿名对象。 然后 foreach 循环可以迭代这些对象并直接访问索引和值。 方法 3:使用自定义迭代器 您可以使用 yield return 关键字实现自定义迭代器扩展方法,以生成一个方法,该方法生成当前元素及其索引。 这有点更高级,但提供了一种灵活的解决方案。 public static IEnumerable<(int index, T value)> WithIndex<t>(this IEnumerable<t> source) { int index = 0; foreach (T value in source) { yield return (index, value); index++; } } public static IEnumerable<(int index, T value)> WithIndex<t>(this IEnumerable<t> source) { int index = 0; foreach (T value in source) { yield return (index, value); index++; } } $vbLabelText $csharpLabel 现在,您可以将此扩展方法与您的集合一起使用: int[] numbers = { 10, 20, 30, 40 }; foreach (var (index, value) in numbers.WithIndex()) { Console.WriteLine($"Index: {index}, Value: {value}"); } int[] numbers = { 10, 20, 30, 40 }; foreach (var (index, value) in numbers.WithIndex()) { Console.WriteLine($"Index: {index}, Value: {value}"); } $vbLabelText $csharpLabel 这种方法通过将手动索引管理抽象为可重用的方法,为具有索引的 foreach 提供了一个更优雅的解决方案。 使用 while 循环访问索引 如果您正在处理数组或列表等集合,可以结合使用 while 循环和索引变量来访问索引和当前元素: int[] numbers = { 10, 20, 30, 40 }; int index = 0; while (index < numbers.Length) { Console.WriteLine($"Index: {index}, Value: {numbers[index]}"); index++; } int[] numbers = { 10, 20, 30, 40 }; int index = 0; while (index < numbers.Length) { Console.WriteLine($"Index: {index}, Value: {numbers[index]}"); index++; } $vbLabelText $csharpLabel 这种方法允许您通过使用索引变量作为数组或列表的下标直接访问索引和当前元素。 自定义集合和 .NET 中的迭代器 如果您正在处理自定义集合,您可以实现自己的迭代器以支持索引访问。 通过实现 IEnumerable 接口并使用 yield return 语句,您可以创建一个返回元素及其索引的迭代器。 下面是创建实现 IEnumerable 的自定义集合的示例: public class CustomCollection<t> : IEnumerable<t> { private T[] _items; public CustomCollection(T[] items) { _items = items; } public IEnumerator<t> GetEnumerator() { for (int i = 0; i < _items.Length; i++) { yield return _items[i]; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } public class CustomCollection<t> : IEnumerable<t> { private T[] _items; public CustomCollection(T[] items) { _items = items; } public IEnumerator<t> GetEnumerator() { for (int i = 0; i < _items.Length; i++) { yield return _items[i]; } } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } $vbLabelText $csharpLabel 然后您可以在 foreach 循环中使用此自定义集合: var customCollection = new CustomCollection<int>(new int[] { 10, 20, 30, 40 }); foreach (int number in customCollection) { Console.WriteLine(number); } var customCollection = new CustomCollection<int>(new int[] { 10, 20, 30, 40 }); foreach (int number in customCollection) { Console.WriteLine(number); } $vbLabelText $csharpLabel 通过实现 GetEnumerator 方法并使用 yield return,可创建一个迭代器,让 foreach 循环能够像处理 .NET 中的任何其他集合一样处理您的自定义集合。 使用字典并与键值对一起迭代 在处理字典时,foreach 循环允许您直接遍历键值对。 这是在每次迭代时访问键和值的常见用例: Dictionary<int, string> dict = new Dictionary<int, string> { { 1, "Apple" }, { 2, "Banana" }, { 3, "Cherry" } }; foreach (var kvp in dict) { Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}"); } Dictionary<int, string> dict = new Dictionary<int, string> { { 1, "Apple" }, { 2, "Banana" }, { 3, "Cherry" } }; foreach (var kvp in dict) { Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}"); } $vbLabelText $csharpLabel 在此示例中,kvp.Key 为您提供当前键,kvp.Value 为您提供当前值。 将 IronPDF 与 C# foreach 循环和索引结合使用 IronPDF 是一个 PDF 库,用于处理 从 HTML 生成 PDF 及其他与 PDF 相关的任务。 它也兼容最新的 .NET Framework。 使用 IronPDF 生成 PDF 时,您可能需要遍历数据集合并将内容动态插入到 PDF 文件中。结合 foreach 循环与索引处理,可以根据集合中当前项的索引管理位置、编号或自定义逻辑。 以下是使用 IronPDF 创建 PDF 的实际示例,其中集合中的每个项都与其索引一起插入到文档中。 using IronPdf; class Program { static void Main(string[] args) { // Create a new PDF document renderer var pdf = new ChromePdfRenderer(); // Sample data array string[] items = { "First Item", "Second Item", "Third Item" }; // Initialize the HTML content with foreach loop and index string htmlContent = "<html><body>"; int index = 0; foreach (var item in items) { htmlContent += $"<h2>Item {index + 1}: {item}</h2>"; index++; } htmlContent += "</body></html>"; // Render the HTML to PDF var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent); // Save the PDF document pdfDocument.SaveAs("output.pdf"); // Notify completion Console.WriteLine("PDF created successfully with indexed items."); } } using IronPdf; class Program { static void Main(string[] args) { // Create a new PDF document renderer var pdf = new ChromePdfRenderer(); // Sample data array string[] items = { "First Item", "Second Item", "Third Item" }; // Initialize the HTML content with foreach loop and index string htmlContent = "<html><body>"; int index = 0; foreach (var item in items) { htmlContent += $"<h2>Item {index + 1}: {item}</h2>"; index++; } htmlContent += "</body></html>"; // Render the HTML to PDF var pdfDocument = pdf.RenderHtmlAsPdf(htmlContent); // Save the PDF document pdfDocument.SaveAs("output.pdf"); // Notify completion Console.WriteLine("PDF created successfully with indexed items."); } } $vbLabelText $csharpLabel 以下是输出的 PDF 文件: 结论 在 C# 中,虽然 foreach 循环是一种便利的遍历集合的方法,但它不支持原生的索引。 然而,有几种方法可以克服这个限制。 无论您是使用简单的索引变量、LINQ 的 Select 方法还是自定义迭代器,您都可以在迭代期间访问当前或下一个元素的索引。 了解这些技术可以帮助您更高效地使用 foreach 循环,尤其是在您需要知道每个元素的索引时。 使用 IronPDF,您不必立即做出决定。 我们提供免费试用,让您深入探索软件的功能。 如果您喜欢所看到的,许可证起价为 $799。 常见问题解答 如何在 C# 的 foreach 循环中跟踪元素的索引? 要在 C# 的 foreach 循环中跟踪索引,可以手动递增一个独立的索引变量,使用 LINQ 的 Select 方法投影带有索引的元素,或创建一个自定义迭代器以同时生成元素和它的索引。 LINQ Select 方法是什么,它如何帮助实现索引? LINQ Select 方法可以将集合中的每个元素转换为新形式,并包括元素的索引。这种投影允许您在 foreach 循环的迭代过程中访问元素及其索引。 如何创建 C# 的自定义迭代器来实现索引? 可以使用 yield return 关键字创建 C# 的自定义迭代器。这允许您构建一个方法来迭代集合并生成当前元素和其索引,简化循环索引。 PDF 库能否协助在 C# 中创建索引内容? 可以,像 IronPDF 这样的 PDF 库可以与 C# 的 foreach 循环一起使用来迭代数据集合并将索引内容插入到 PDF 中。这种方法允许动态内容定位和精确的索引。 如何在 C# 中使用 foreach 循环迭代字典? 在 C# 中,foreach 循环可以通过访问每个键-值对来迭代字典。这允许开发人员在迭代过程中直接处理键和值。 在 C# 开发中使用 PDF 库有什么好处? PDF 库使得开发人员能够从 HTML 生成 PDF 并在 C# 中执行各种 PDF 操作操作。它们通常提供免费试用以探索功能,还有可供购买的许可证。 如何在 C# 中使用 while 循环进行索引迭代? 可以结合索引变量使用 while 循环来迭代 C# 中的集合,通过将索引用作下标来访问索引和当前元素。 Jacob Mellor 立即与工程团队聊天 首席技术官 Jacob Mellor 是 Iron Software 的首席技术官,也是一位开创 C# PDF 技术的有远见的工程师。作为 Iron Software 核心代码库的原始开发者,他从公司成立之初就开始塑造公司的产品架构,与首席执行官 Cameron Rimington 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。Jacob 拥有曼彻斯特大学土木工程一级荣誉工程学士学位(BEng)(1998-2001 年)。他的旗舰产品 IronPDF 和 Iron Suite for .NET 库在全球的 NuGet 安装量已超过 3000 万次,其基础代码继续为全球使用的开发人员工具提供动力。Jacob 拥有 25 年的商业经验和 41 年的编码专业知识,他一直专注于推动企业级 C#、Java 和 Python PDF 技术的创新,同时指导下一代技术领导者。 相关文章 已更新2026年2月20日 架起 CLI 简洁性与 .NET 的桥梁:使用 IronPDF for .NET 的 Curl DotNet Jacob Mellor 通过 CurlDotNet 填补了这一空白,CurlDotNet 库的创建是为了将 cURL 的熟悉感带入 .NET 生态系统。 阅读更多 已更新2025年12月20日 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多 已更新2025年12月20日 C# String Equals(开发者用法) 与强大的 PDF 库 IronPDF 结合使用,切换模式匹配允许您为文档处理构建更智能、更简洁的逻辑。 阅读更多 C# 索引器(开发者用法)Socket io .NET(对开发人员的...
已更新2026年2月20日 架起 CLI 简洁性与 .NET 的桥梁:使用 IronPDF for .NET 的 Curl DotNet Jacob Mellor 通过 CurlDotNet 填补了这一空白,CurlDotNet 库的创建是为了将 cURL 的熟悉感带入 .NET 生态系统。 阅读更多
已更新2025年12月20日 RandomNumberGenerator C# 使用 RandomNumberGenerator C# 类可以帮助将您的 PDF 生成和编辑项目提升到一个新的高度。 阅读更多