IRONSOFTWAREHOME
ATUALIZAÇÕES DO DESENVOLVEDOR

C# foreach com índice (Como funciona para desenvolvedores)

Curtis Chau
Curtis Chau
Updated: 21 de abril de 2026

Em C#, o comando foreach é normalmente usado para iterar sobre coleções como arrays, listas ou outros tipos enumeráveis. No entanto, uma limitação é que o loop foreach não fornece uma variável de índice integrada para acompanhar a iteração atual. Os desenvolvedores frequentemente precisam acessar o índice do elemento atual. A seguir, exploraremos várias maneiras de implementar essa funcionalidade e a biblioteca IronPDF .

Noções básicas do loop foreach

O loop foreach foi projetado para simplificar a iteração por arrays, listas, dicionários e outros tipos que implementam IEnumerable. Aqui está um exemplo básico de como usar uma instrução foreach para percorrer uma matriz de dados do tipo inteiro:

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

Neste exemplo, o number representa o elemento da coleção durante cada iteração. O loop itera automaticamente por todos os elementos da matriz. No entanto, não existe uma forma integrada de acessar o índice do elemento atual.

Manipulando o índice em um loop foreach

Embora o C# não forneça diretamente o índice em um loop foreach, diversas técnicas podem resolver isso. Vamos discutir esses métodos em detalhes.

Método 1: Utilizando uma variável separada

Uma das maneiras mais simples de obter o índice do elemento atual é usar uma variável de índice externa. Você precisará incrementá-lo manualmente dentro do loop:

int[] numbers = { 10, 20, 30, 40 };
int numberIndex = 0;
foreach (int number in numbers)
{
    Console.WriteLine($"Index: {numberIndex}, Value: {number}");
    numberIndex++;
}

Neste código, a variável de índice é inicializada antes do início do loop e, em seguida, incrementada dentro do loop durante cada iteração. Embora essa abordagem funcione, ela exige a manutenção manual do índice, o que nem sempre é o ideal.

Método 2: Usando o método Select do LINQ

O método Select do LINQ pode ser usado para projetar cada elemento de uma coleção em uma nova forma, incluindo seu índice. Eis um exemplo:

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

Neste exemplo, Select cria um objeto anônimo que contém tanto o valor do elemento atual quanto seu índice. O loop foreach pode então iterar sobre esses objetos e acessar diretamente tanto o índice quanto o valor.

Método 3: Utilizando um Iterador Personalizado

Você pode implementar um método de extensão de iterador personalizado usando a palavra-chave yield return para gerar um método que produza tanto o elemento atual quanto seu índice. Esta opção é um pouco mais avançada, mas oferece uma solução flexível.

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++;
    }
}

Agora você pode usar esse método de extensão com suas coleções:

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

Essa abordagem cria uma solução mais elegante para o problema do foreach com índice, abstraindo o gerenciamento manual do índice em um método reutilizável.

Utilizando um loop while para acessar índices

Se você estiver trabalhando com coleções como arrays ou listas, pode usar um loop while em conjunto com uma variável de índice para acessar tanto o índice quanto o elemento atual:

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

C# foreach com índice (Como Funciona Para Desenvolvedores): Figura 1 - Saída de Índices

Este método permite acessar diretamente tanto o índice quanto o elemento atual, usando a variável de índice como um subscrito para a matriz ou lista.

Coleções e iteradores personalizados em .NET

Se você estiver trabalhando com coleções personalizadas, poderá implementar seus iteradores para oferecer suporte ao acesso indexado. Ao implementar a interface IEnumerable e usar a instrução yield return, você pode criar iteradores que retornem tanto o elemento quanto seu índice.

Aqui está um exemplo de como criar uma coleção personalizada que implementa a interface 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();
    }
}

Em seguida, você pode usar essa coleção personalizada em um loop foreach:

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

Ao implementar o método GetEnumerator e usar yield return, você cria um iterador que permite à estrutura foreach trabalhar com sua coleção personalizada assim como qualquer outra coleção no .NET.

Utilizando dicionários e iterando com pares chave-valor

Ao trabalhar com dicionários, o loop foreach permite iterar diretamente sobre pares de chave-valor. Este é um caso de uso comum para acessar tanto a chave quanto o valor durante cada iteração:

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

Neste exemplo, kvp.Key fornece a chave atual e kvp.Value fornece o valor atual.

Usando IronPDF com Loop foreach C# e Índice

C# foreach com índice (Como Funciona Para Desenvolvedores): Figura 2 - IronPDF

IronPDF é uma biblioteca PDF para lidar com a geração de PDFs a partir de HTML e outras tarefas relacionadas a PDFs em C#. Também é compatível com a versão mais recente do .NET Framework . Ao gerar PDFs usando o IronPDF, você pode precisar iterar sobre uma coleção de dados e inserir conteúdo dinamicamente no seu arquivo PDF. Combinar o loop foreach com o tratamento de índices permite gerenciar o posicionamento, a numeração ou a lógica personalizada com base no índice do item atual na coleção. Aqui está um exemplo prático de como usar o IronPDF para criar um PDF onde cada item de uma coleção é inserido no documento, juntamente com seu índice.

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

Aqui está o arquivo PDF gerado:

C# foreach com índice (Como Funciona Para Desenvolvedores): Figura 3 - Saída de PDF

Conclusão

C# foreach com índice (Como Funciona Para Desenvolvedores): Figura 4 - Licenciamento

Em C#, embora o loop foreach seja uma maneira conveniente de iterar sobre coleções, ele não oferece suporte nativo para indexação. No entanto, existem diversas maneiras de superar essa limitação. Quer você use uma variável de índice simples, o método Select do LINQ ou iteradores personalizados, você pode obter acesso ao índice do elemento atual ou do próximo durante a iteração. Compreender essas técnicas pode ajudá-lo a usar o loop foreach de forma mais eficiente, especialmente quando você precisa saber o índice de cada elemento.

Com o IronPDF, você não precisa se comprometer imediatamente. Oferecemos um período de teste gratuito que lhe permite explorar em profundidade as funcionalidades do software. Se você gostar do que vê, as licenças começam a partir de $999.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais bem estruturados e visualmente atraentes.

...
Leia mais

Artigos relacionados

Key in blue circle

Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.

Your trial license will be sent to your email address

Sem limitações. 100% desbloqueado. Sem cartão de crédito.

bullet_checkedNão é necessário cartão de crédito nem criação de conta.Sem limitações. 100% desbloqueado. Sem cartão de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Agende sua demonstração ao vivo gratuita.
Booking Badge

Aprovado por milhões de engenheiros em todo o mundo.

Logotipos dos clientes da Iron Software
Agende sua consulta sem compromisso.
Preencha o formulário abaixo ou envie um e-mail para sales@ironsoftware.com
Os seus dados serão sempre mantidos em sigilo.
Aprovado por milhões de engenheiros em todo o mundo.
Logotipos dos clientes da Iron Software
Obtenha sua chave de avaliação gratuita de 30 dias instantaneamente.
Não é necessário cartão de crédito nem criação de conta.