AYUDA .NET

C# para cada uno (Cómo funcionan las TI para desarrolladores)

Actualizado 16 de mayo, 2023
Compartir:

En este tutorial, trataremos el bucle "foreach" de C#, una herramienta esencial para los desarrolladores. El bucle foreach simplifica el proceso de iteración a través de una colección, facilitando la realización de operaciones sobre cada elemento sin preocuparse de los detalles subyacentes. Discutiremos la importancia de foreach, sus casos de uso y cómo implementarlo en tu código C#.

Introducción al bucle `foreach

El bucle foreach es una potente herramienta para que los desarrolladores iteren a través de colecciones de forma concisa y legible. Simplifica el código y reduce las posibilidades de error, ya que no es necesario gestionar manualmente el índice o el recuento de los elementos de la colección. En términos de declaraciones de variables, el bucle foreach tiene cinco declaraciones de variables, mientras que el bucle for sólo tiene tres declaraciones de variables.

Los casos de uso de foreach incluyen:

  • Suma de valores en una colección
  • Buscar un artículo en una colección
  • Modificar elementos de una colección
  • Realizar acciones en cada elemento de una colección

Comprender las colecciones

Existen diferentes tipos de colecciones en C# que se utilizan para almacenar un grupo de elementos en un único objeto. Se trata de matrices, listas, diccionarios, etc. El bucle foreach es una herramienta útil que se puede utilizar con cualquier colección que implemente la interfaz IEnumerable o IEnumerable.

Algunos tipos de recogida habituales son:

  • Matrices: Una colección de tamaño fijo de elementos con el mismo tipo de datos.
  • Listas: Una colección dinámica de elementos con el mismo tipo de datos.
  • Diccionarios: Una colección de pares clave-valor, donde cada clave es única.

    El espacio de nombres System.Collections.Generic contiene el método de extensión ForEach que puede utilizarse con cualquier clase de colección incorporada.

Implementación de la sentencia foreach en C#

Ahora que tenemos una comprensión básica de las colecciones y el bucle for each, vamos a sumergirnos en la sintaxis y ver cómo funciona en C#.

Sintaxis del bucle For Each


    foreach (variableType variableName in collection)
    {
        //  Código a ejecutar para cada elemento
    }

    foreach (variableType variableName in collection)
    {
        //  Código a ejecutar para cada elemento
    }
For Each variableName As variableType In collection
		'  Código a ejecutar para cada elemento
Next variableName
VB   C#

Aquí, variableType representa el tipo de datos de los elementos de la colección, variableName es el nombre dado al elemento actual en el bucle (variable de bucle)y collection se refiere a la colección sobre la que se quiere iterar.

Ejemplo

Consideremos un ejemplo en el que tenemos una lista de números enteros y queremos hallar la suma de todos los elementos de la lista.


    using System;
    using System.Collections.Generic;

            //  Crear una lista de números enteros
            List numbers = new List { 1, 2, 3, 4, 5 };

            //  Inicializar una variable para almacenar la suma
            int sum = 0;

            //  Iterar a través de la lista utilizando el bucle for each
            foreach (int number in numbers)
            {
                sum += number;
            }

            //  Imprimir la suma
            Console.WriteLine("The sum of the elements is: " + sum);

    using System;
    using System.Collections.Generic;

            //  Crear una lista de números enteros
            List numbers = new List { 1, 2, 3, 4, 5 };

            //  Inicializar una variable para almacenar la suma
            int sum = 0;

            //  Iterar a través de la lista utilizando el bucle for each
            foreach (int number in numbers)
            {
                sum += number;
            }

            //  Imprimir la suma
            Console.WriteLine("The sum of the elements is: " + sum);
Imports System
	Imports System.Collections.Generic

			'  Crear una lista de números enteros
			Private numbers As New List From {1, 2, 3, 4, 5}

			'  Inicializar una variable para almacenar la suma
			Private sum As Integer = 0

			'  Iterar a través de la lista utilizando el bucle for each
			For Each number As Integer In numbers
				sum += number
			Next number

			'  Imprimir la suma
			Console.WriteLine("The sum of the elements is: " & sum)
VB   C#

Salida

Cuando el bucle se ejecuta, da la siguiente salida.


    The sum of the elements is: 15

    The sum of the elements is: 15
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'The sum @of the elements is: 15
VB   C#

En el ejemplo anterior, primero creamos una lista de enteros llamada números e inicializamos una variable suma para almacenar la suma de los elementos. A continuación, utilizamos el bucle foreach para recorrer la lista y añadir el valor de cada elemento a la suma. Por último, imprimimos la suma en la consola. También podemos imprimir un array utilizando el bucle foreach de forma similar.

Variaciones y buenas prácticas

Ahora que tenemos una comprensión básica de cómo utilizar el bucle for each, vamos a discutir algunas variaciones y mejores prácticas.

Iteración de sólo lectura: El bucle for each es el más adecuado para la iteración de sólo lectura, ya que modificar la colección mientras se itera puede provocar resultados inesperados o errores en tiempo de ejecución. Si necesita modificar la colección durante la iteración, considere utilizar un bucle for tradicional o crear una nueva colección con las modificaciones deseadas.

Utilizar la palabra clave var: En lugar de especificar explícitamente el tipo de datos de los elementos de la colección, puedes utilizar la palabra clave var para dejar que el compilador infiera el tipo de datos. Esto puede hacer que el código sea más conciso y fácil de mantener.

Ejemplo:


    foreach (var number in numbers)
    {
        Console.WriteLine(number);
    }

    foreach (var number in numbers)
    {
        Console.WriteLine(number);
    }
For Each number In numbers
		Console.WriteLine(number)
Next number
VB   C#

**Cuando utilices un bucle for each para iterar a través de diccionarios, necesitarás trabajar con la estructura KeyValuePair. Esta estructura representa un par clave-valor en un diccionario.

Ejemplo:


    Dictionary ageDictionary = new Dictionary
    {
        { "Alice", 30 },
        { "Bob", 25 },
        { "Charlie", 22 }
    };

    foreach (KeyValuePair entry in ageDictionary)
    {
        Console.WriteLine($"{entry.Key} is {entry.Value} years old.");
    }

    Dictionary ageDictionary = new Dictionary
    {
        { "Alice", 30 },
        { "Bob", 25 },
        { "Charlie", 22 }
    };

    foreach (KeyValuePair entry in ageDictionary)
    {
        Console.WriteLine($"{entry.Key} is {entry.Value} years old.");
    }
Dim ageDictionary As New Dictionary From {
	{ "Alice", 30 },
	{ "Bob", 25 },
	{ "Charlie", 22 }
}

	For Each entry As KeyValuePair In ageDictionary
		Console.WriteLine($"{entry.Key} is {entry.Value} years old.")
	Next entry
VB   C#

LINQ y para cada uno: LINQ (Idioma Consulta integrada) es una potente función de C# que permite consultar y manipular datos de forma más declarativa. Puede utilizar LINQ con el bucle for each para crear un código más expresivo y eficiente.

Ejemplo:


    using System;
    using System.Collections.Generic;
    using System.Linq;
            List numbers = new List { 1, 2, 3, 4, 5 };

            //  Utilice LINQ para filtrar los números pares
            var evenNumbers = numbers.Where(n => n % 2 == 0);

            //  Iterar a través de los números pares utilizando el bucle for each
            foreach (var number in evenNumbers)
            {
                Console.WriteLine(number);
            }

    using System;
    using System.Collections.Generic;
    using System.Linq;
            List numbers = new List { 1, 2, 3, 4, 5 };

            //  Utilice LINQ para filtrar los números pares
            var evenNumbers = numbers.Where(n => n % 2 == 0);

            //  Iterar a través de los números pares utilizando el bucle for each
            foreach (var number in evenNumbers)
            {
                Console.WriteLine(number);
            }
Imports System
	Imports System.Collections.Generic
	Imports System.Linq
			Private numbers As New List From {1, 2, 3, 4, 5}

			'  Utilice LINQ para filtrar los números pares
			Private evenNumbers = numbers.Where(Function(n) n Mod 2 = 0)

			'  Iterar a través de los números pares utilizando el bucle for each
			For Each number In evenNumbers
				Console.WriteLine(number)
			Next number
VB   C#

Añadir funcionalidad IronPDF al tutorial de C# para cada uno

En esta sección, ampliaremos nuestro tutorial sobre el bucle "C# for each" presentando IronPDF, una popular biblioteca para trabajar con archivos PDF en C#. Demostraremos cómo utilizar el bucle foreach junto con IronPDF para generar un informe PDF basado en una colección de datos.

Presentación de IronPDF

IronPDF es una potente biblioteca para crear, editar y extraer contenido de archivos PDF en C#. Proporciona una API fácil de usar para trabajar con documentos PDF, lo que la convierte en una opción excelente para los desarrolladores que necesitan incorporar funciones PDF a sus aplicaciones.

Algunas de las principales características de IronPDF son:

  • Generar PDF a partir de HTML URL e imágenes
  • Editar documentos PDF existentes
  • Extraer texto e imágenes de PDF
  • Añadir anotaciones, campos de formulario y cifrado a los PDF

Instalación de IronPDF

Para empezar a utilizar IronPDF, deberá instalar el paquete IronPDF NuGet. Puede hacerlo ejecutando el siguiente comando en el directorio de su proyecto:

Install-Package IronPdf

Generación de un informe PDF con IronPDF y para cada

En este ejemplo, utilizaremos la librería IronPDF y el bucle for each para crear un informe PDF de una lista de productos, incluyendo sus nombres y precios.

En primer lugar, vamos a crear una simple clase Producto para representar los productos:


    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }

        public Product(string name, decimal price)
        {
            Name = name;
            Price = price;
        }
    }

    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }

        public Product(string name, decimal price)
        {
            Name = name;
            Price = price;
        }
    }
Public Class Product
		Public Property Name() As String
		Public Property Price() As Decimal

		Public Sub New(ByVal name As String, ByVal price As Decimal)
			Me.Name = name
			Me.Price = price
		End Sub
End Class
VB   C#

A continuación, vamos a crear una lista de objetos Producto para generar el informe PDF:


    List products = new List
    {
        new Product("Product A", 29.99m),
        new Product("Product B", 49.99m),
        new Product("Product C", 19.99m),
    };

    List products = new List
    {
        new Product("Product A", 29.99m),
        new Product("Product B", 49.99m),
        new Product("Product C", 19.99m),
    };
Dim products As New List From {
	New Product("Product A", 29.99D),
	New Product("Product B", 49.99D),
	New Product("Product C", 19.99D)
}
VB   C#

Ahora, podemos utilizar IronPDF y el bucle for each para generar un informe PDF que contenga la información del producto:


    using System;
    using System.Collections.Generic;
    using IronPdf;

    //  Crear una lista de productos
    List products = new List
    {
        new Product("Product A", 29.99m),
        new Product("Product B", 49.99m),
        new Product("Product C", 19.99m),
    };

    //  Inicializar una cadena HTML para almacenar el contenido del informe
    string htmlReport = "Product ReportNamePrice";

    //  Recorrer la lista de productos utilizando el bucle for each
    foreach (var product in products)
    {
        //  Añadir información del producto al informe HTML
        htmlReport += $"{product.Name}${product.Price}";
    }

    //  Cerrar la etiqueta de tabla en el informe HTML
    htmlReport += "";

    //  Crear una nueva instancia de la clase HtmlToPdf
    var htmlToPdf = new ChromePdfRenderer();

    //  Generar el PDF a partir del informe HTML
    var PDF = htmlToPdf.RenderHtmlAsPdf(htmlReport);

    //  Guardar el PDF en un archivo
    PDF.SaveAs("ProductReport.PDF");

    //  Informar al usuario de que se ha generado el PDF
    Console.WriteLine("ProductReport.PDF has been generated.");

    using System;
    using System.Collections.Generic;
    using IronPdf;

    //  Crear una lista de productos
    List products = new List
    {
        new Product("Product A", 29.99m),
        new Product("Product B", 49.99m),
        new Product("Product C", 19.99m),
    };

    //  Inicializar una cadena HTML para almacenar el contenido del informe
    string htmlReport = "Product ReportNamePrice";

    //  Recorrer la lista de productos utilizando el bucle for each
    foreach (var product in products)
    {
        //  Añadir información del producto al informe HTML
        htmlReport += $"{product.Name}${product.Price}";
    }

    //  Cerrar la etiqueta de tabla en el informe HTML
    htmlReport += "";

    //  Crear una nueva instancia de la clase HtmlToPdf
    var htmlToPdf = new ChromePdfRenderer();

    //  Generar el PDF a partir del informe HTML
    var PDF = htmlToPdf.RenderHtmlAsPdf(htmlReport);

    //  Guardar el PDF en un archivo
    PDF.SaveAs("ProductReport.PDF");

    //  Informar al usuario de que se ha generado el PDF
    Console.WriteLine("ProductReport.PDF has been generated.");
Imports System
	Imports System.Collections.Generic
	Imports IronPdf

	'  Crear una lista de productos
	Private products As New List From {
		New Product("Product A", 29.99D),
		New Product("Product B", 49.99D),
		New Product("Product C", 19.99D)
	}

	'  Inicializar una cadena HTML para almacenar el contenido del informe
	Private htmlReport As String = "Product ReportNamePrice"

	'  Recorrer la lista de productos utilizando el bucle for each
	For Each product In products
		'  Añadir información del producto al informe HTML
		htmlReport &= $"{product.Name}${product.Price}"
	Next product

	'  Cerrar la etiqueta de tabla en el informe HTML
	htmlReport &= ""

	'  Crear una nueva instancia de la clase HtmlToPdf
	Dim htmlToPdf = New ChromePdfRenderer()

	'  Generar el PDF a partir del informe HTML
	Dim PDF = htmlToPdf.RenderHtmlAsPdf(htmlReport)

	'  Guardar el PDF en un archivo
	PDF.SaveAs("ProductReport.PDF")

	'  Informar al usuario de que se ha generado el PDF
	Console.WriteLine("ProductReport.PDF has been generated.")
VB   C#

C# For Each (Cómo funciona para los desarrolladores) Figura 1 - Resultado de salida

Conclusión

A lo largo de este tutorial, hemos explorado los fundamentos del bucle "for each" de C#, su importancia, casos de uso y cómo implementarlo en tu código. También presentamos IronPDF, una potente biblioteca para trabajar con archivos PDF en C#, y demostramos cómo utilizar el bucle for each junto con IronPDF para generar un informe PDF basado en una colección de datos.

Sigue aprendiendo y desarrollando tus habilidades, y pronto serás capaz de aprovechar todo el potencial del bucle for each y otras características de C# para crear aplicaciones robustas y eficientes. IronPDF ofrece prueba gratuita para probar la biblioteca. Si decide comprarla, la licencia de IronPDF comienza a partir de $749.

< ANTERIOR
C# String Replace (Cómo funciona para desarrolladores)
SIGUIENTE >
Try/Catch en C# (Cómo funciona para desarrolladores)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 9,974,197 Ver licencias >
123