IRONSOFTWAREHOME
ACTUALIZACIONES PARA DESARROLLADORES

C# foreach con índice (Cómo Funciona para Desarrolladores)

Jacob Mellor, Director de Tecnología @ Team Iron
Jacob Mellor
Updated: 21 de abril de 2026

En C#, la instrucción foreach se suele usar para iterar sobre colecciones como matrices, listas u otros tipos enumerables. Sin embargo, una limitación es que el bucle foreach no proporciona una variable de índice incorporada para rastrear la iteración actual. Los desarrolladores a menudo necesitan acceder al índice del elemento actual. A continuación, exploraremos varias formas de implementar esta funcionalidad y la biblioteca IronPDF.

Los fundamentos del bucle foreach

El bucle foreach está diseñado para simplificar la iteración a través de matrices, listas, diccionarios y otros tipos que implementan IEnumerable. Aquí hay un ejemplo básico de cómo usar una instrucción foreach para recorrer un arreglo de tipo de datos enteros:

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

En este ejemplo, el number representa el elemento de la colección durante cada iteración. El bucle itera automáticamente a través de todos los elementos en el arreglo. Sin embargo, no hay una manera incorporada de acceder al índice del elemento actual.

Manejo del índice en un bucle foreach

Aunque C# no proporciona directamente el índice en un bucle foreach, varias técnicas pueden resolver esto. Discutamos estos métodos en detalle.

Método 1: Uso de una variable independiente

Una de las formas más simples de obtener el índice del elemento actual es usar una variable de índice externa. Deberás incrementarlo manualmente dentro del bucle:

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

En este código, la variable de índice se inicializa antes de que comience el bucle y luego se incrementa dentro del bucle durante cada iteración. Si bien este enfoque funciona, requiere llevar manualmente el índice, lo cual no siempre es ideal.

Método 2: Uso del método Select de LINQ

El método Select de LINQ se puede utilizar para proyectar cada elemento de una colección en una nueva forma, incluyendo su índice. Aquí hay un ejemplo:

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

En este ejemplo, Select crea un objeto anónimo que contiene tanto el valor del elemento actual como su índice. El bucle foreach puede entonces iterar sobre estos objetos y acceder tanto al índice como al valor directamente.

Método 3: Uso de un iterador personalizado

Puedes implementar un método de extensión de iterador personalizado usando la palabra clave yield return para generar un método que produzca tanto el elemento actual como su índice. Este es un poco más avanzado pero ofrece una solución flexible.

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

Ahora, puedes usar este método de extensión con tus colecciones:

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

Este enfoque crea una solución más elegante al problema del foreach con índice al abstraer el manejo manual del índice en un método reutilizable.

Uso de un bucle while para acceder a índices

Si estás trabajando con colecciones como matrices o listas, puedes usar un bucle while junto con una variable de índice para acceder tanto al índice como al elemento actual:

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

C# foreach con índice (Cómo Funciona Para Desarrolladores): Figura 1 - Salida de Índices

Este método te permite acceder tanto al índice como al elemento actual directamente usando la variable de índice como subíndice para el arreglo o lista.

Colecciones personalizadas e iteradores en .NET

Si estás trabajando con colecciones personalizadas, puedes implementar tus propios iteradores para soportar el acceso indexado. Implementando la interfaz IEnumerable y usando la declaración yield return, puedes crear iteradores que devuelvan tanto el elemento como su índice.

Aquí tienes un ejemplo de cómo crear una colección personalizada que implementa 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();
    }
}

Entonces puedes usar esta colección personalizada en un bucle foreach:

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

Al implementar el método GetEnumerator y usar yield return, creas un iterador que permite que el bucle foreach funcione con tu colección personalizada al igual que con cualquier otra colección en .NET.

Uso de diccionarios e iteración con pares clave-valor

Al trabajar con diccionarios, el bucle foreach te permite iterar directamente sobre los pares clave-valor. Este es un caso de uso común para acceder tanto a la clave como al valor durante cada iteración:

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

En este ejemplo, kvp.Key te da la clave actual y kvp.Value te da el valor actual.

Uso de IronPDF con bucle foreach e índice en C#

C# foreach con índice (Cómo Funciona Para Desarrolladores): Figura 2 - IronPDF

IronPDF es una biblioteca PDF para manejar la generación de PDF a partir de HTML y otras tareas relacionadas con PDF en C#. También es compatible con el último .NET Framework. Al generar PDFs usando IronPDF, puedes necesitar iterar sobre una colección de datos e insertar dinámicamente contenido en tu archivo PDF. Combinar el bucle foreach con el manejo de índices te permite gestionar la posición, la numeración o la lógica personalizada basada en el índice del elemento actual en la colección. Aquí hay un ejemplo práctico de cómo usar IronPDF para crear un PDF donde cada ítem de una colección se inserta en el documento, junto con su í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.");
    }
}

Aquí está el archivo PDF de salida:

C# foreach con índice (Cómo Funciona Para Desarrolladores): Figura 3 - Salida de PDF

Conclusión

En C#, aunque el bucle foreach es una manera conveniente de iterar sobre colecciones, carece de soporte nativo para indexar. Sin embargo, hay varias formas de superar esta limitación. Ya sea que utilices una variable de índice simple, el método Select de LINQ, o iteradores personalizados, puedes acceder al índice del elemento actual o siguiente durante la iteración. Entender estas técnicas puede ayudarte a hacer un uso más eficiente del bucle foreach, especialmente cuando necesitas saber el índice de cada elemento.

Con IronPDF, no tienes que comprometerte de inmediato. Ofrecemos una prueba gratuita que te permite explorar las capacidades del software en profundidad. Si te gusta lo que ves, las licencias comienzan en $999.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

OR
bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta
Biblioteca C# NuGet para PDF
Instalar con NuGet

Versión: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. En el Explorador de Soluciones, haga clic derecho en Referencias, Administrar Paquetes NuGet
  2. Seleccione Examinar y busque "IronPDF"
  3. Seleccione el paquete e instale
C# PDF DLL
Descargar DLL

Versión: 2026.9

o descargue el Instalador de Windows aquí.

  1. Descargue y descomprima IronPDF en una ubicación como ~/Libs dentro del directorio de su solución
  2. En el Explorador de Soluciones de Visual Studio, haga clic derecho en Referencias. Seleccione Examinar, "IronPDF.dll"

Licencias desde $999