IRONSOFTWAREHOME
開發者更新

C# foreach與索引(對開發者如何理解的工作)

Jacob Mellor,首席技術官 @ Team Iron
Jacob Mellor
Updated: 2026年4月21日

在C#中,foreach語句通常用於迭代遍曆像陣列、列表或其他可枚舉型別的集合。然而,一個限制是foreach迴圈沒有提供內建的索引變數來追蹤當前的迭代。 開發者常常需要存取當前元素的索引。 下面,我們將探索實現該功能的各種方法和IronPDF程式庫

foreach迴圈的基本概念

foreach迴圈旨在簡化對陣列、列表、字典和其他實現IEnumerable的型別的遍歷。 這裡有一個基本範例,說明如何使用foreach語句來遍歷整數資料型別的陣列:

int[] numbers = { 10, 20, 30, 40 };
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

在此範例中,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++;
}

在此程式碼中,索引變數是在迴圈開始前初始化的,然後在每次迭代中在迴圈內增加。 雖然該方法有效,但需要手動維護索引,這並不總是理想的。

方法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}");
}

在此範例中,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++;
    }
}

現在,您可以使用此擴展方法與您的集合一起使用:

int[] numbers = { 10, 20, 30, 40 };
foreach (var (index, value) in numbers.WithIndex())
{
    Console.WriteLine($"Index: {index}, Value: {value}");
}

這種方法通過將手動索引管理抽象到一個可重用的方法中,建立了一個更優雅的foreach帶索引問題的解決方案。

使用while迴圈存取索引

如果您正在處理像陣列或列表之類的集合,您可以使用一個索引變數配合while迴圈來存取索引和當前元素:

int[] numbers = { 10, 20, 30, 40 };
int index = 0;
while (index < numbers.Length)
{
    Console.WriteLine($"Index: {index}, Value: {numbers[index]}");
    index++;
}

C# foreach with index (開發者運作方式):圖1-索引輸出

這種方法允許您通過使用索引變數作為陣列或列表的下標直接存取索引和當前元素。

.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();
    }
}

然後您可以在foreach迴圈中使用此自定義集合:

var customCollection = new CustomCollection<int>(new int[] { 10, 20, 30, 40 });
foreach (int number in customCollection)
{
    Console.WriteLine(number);
}

通過實現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}");
}

在此範例中,kvp.Value提供您當前的值。

在C# foreach迴圈和索引中使用IronPDF

C# foreach with index (開發者運作方式):圖2-IronPDF

IronPDF是用於處理從HTML生成PDF和其他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.");
    }
}

這裡是輸出的PDF文件:

C# foreach with index (開發者運作方式):圖3-PDF輸出

結論

在C#中,雖然foreach迴圈是一種遍歷集合的方便方式,但它缺乏對索引的原生支持。 然而,有幾種方法可以克服這一限制。 無論您是使用簡單的索引變數、LINQ的Select方法,還是自定義的迭代器,您都可以在迭代過程中獲得當前或下一個元素的索引。 了解這些技術可以幫助您更有效地使用foreach迴圈,特別是在需要知道每個元素的索引時。

使用IronPDF,您無需立即做出承諾。 我們提供一個免費試用,讓您深入探索該軟體的功能。 如果您滿意所見,許可從$999開始。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

...
閱讀更多

相關文章

Key in blue circle

立即免費取得 30 天試用金鑰

Your trial license will be sent to your email address

無任何限制。100% 解鎖。無需信用卡。

OR
bullet_checked無需信用卡或建立帳號無任何限制。100% 解鎖。無需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
預訂您的免費現場演示
Booking Badge

受到全球數百萬工程師的信任

Iron Software的客戶標誌
獲取您的無義務諮詢
填寫以下表格或電子郵件sales@ironsoftware.com
您的詳細資訊將始終保密
受到全球數百萬工程師的信任
Iron Software的客戶標誌
立即獲取您的30天試用金鑰
無需信用卡或帳戶建立
C# 用於PDF的NuGet程式庫
使用NuGet安裝

版本: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. 在解決方案資源管理器,右鍵點選參考,管理NuGet包
  2. 選擇瀏覽並搜尋"IronPdf"
  3. 選擇套件並安裝
C# PDF DLL
下載DLL

版本: 2026.9

或者點擊此處下載Windows安裝程式。

  1. 下載並解壓IronPDF到類似~/Libs的位置,位於您的解決方案目錄中
  2. 在Visual Studio解決方案資源管理器,右鍵點選參考。選擇瀏覽,"IronPdf.dll"

授權從$999