C# For Each (How IT Works For Developers)

In this tutorial, we will cover the "C# foreach" loop, an essential tool for developers. The foreach loop simplifies the process of iterating through a collection, making it easier to perform operations on each item without worrying about the underlying details. We will discuss the importance of foreach, its use cases, and how to implement it in your C# code.

Introduction to the foreach Loop

The foreach loop is a powerful tool for developers to iterate through collections in a concise and readable manner. It simplifies the code and reduces the chances of errors, as there is no need to manage the index or count of the collection items manually. In terms of variable declarations, the foreach loop has five variable declarations, whereas the for loop only has three variable declarations.

Use cases for foreach include:

  • Summing up values in a collection
  • Searching for an item in a collection
  • Modifying elements in a collection
  • Performing actions on each element of a collection

Understanding Collections

There are different types of collections in C# that are used to store a group of items in a single object. These include arrays, lists, dictionaries, and more. The foreach loop is a useful tool that can be used with any collection that implements the IEnumerable or IEnumerable interface.

Some common collection types include:

  • Arrays: A fixed-size collection of elements with the same data type.
  • Lists: A dynamic collection of elements with the same data type.
  • Dictionaries: A collection of key-value pairs, where each key is unique.

The System.Collections.Generic namespace contains the ForEach extension method that can be used with any built-in collection classes.

Implementing foreach statement in C#

Now that we have a basic understanding of collections and the for each loop, let's dive into the syntax and see how it works in C#.

Syntax of For Each Loop


    foreach (variableType variableName in collection)
    {
        // Code to execute for each item
    }

    foreach (variableType variableName in collection)
    {
        // Code to execute for each item
    }
For Each variableName As variableType In collection
		' Code to execute for each item
Next variableName
VB   C#

Here, variableType represents the data type of the items in the collection, variableName is the name given to the current item in the loop (loop variable), and collection refers to the collection that you want to iterate through.

Example

Let's consider an example where we have a list of integers, and we want to find the sum of all the elements in the list.


    using System;
    using System.Collections.Generic;

            // Create a list of integers
            List numbers = new List { 1, 2, 3, 4, 5 };

            // Initialize a variable to store the sum
            int sum = 0;

            // Iterate through the list using for each loop
            foreach (int number in numbers)
            {
                sum += number;
            }

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

    using System;
    using System.Collections.Generic;

            // Create a list of integers
            List numbers = new List { 1, 2, 3, 4, 5 };

            // Initialize a variable to store the sum
            int sum = 0;

            // Iterate through the list using for each loop
            foreach (int number in numbers)
            {
                sum += number;
            }

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

			' Create a list of integers
			Private numbers As New List From {1, 2, 3, 4, 5}

			' Initialize a variable to store the sum
			Private sum As Integer = 0

			' Iterate through the list using for each loop
			For Each number As Integer In numbers
				sum += number
			Next number

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

Output

When the loop executes, it gives the following output.


    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#

In the example above, we first create a list of integers called numbers and initialize a variable sum to store the sum of the elements. Then, we use the foreach loop to iterate through the list and add the value of each element to the sum. Finally, we print the sum to the console. We can also print an array using the foreach loop similarly.

Variations and Best Practices

Now that we have a basic understanding of how to use the for each loop, let's discuss some variations and best practices.

Read-only Iteration: The for each loop is best suited for read-only iteration, as modifying the collection while iterating can lead to unexpected results or runtime errors. If you need to modify the collection during iteration, consider using a traditional for loop or creating a new collection with the desired modifications.

Using the var keyword: Instead of explicitly specifying the data type of the elements in the collection, you can use the var keyword to let the compiler infer the data type. This can make the code more concise and easier to maintain.

Example:


    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#

Iterating through dictionaries: When using a for each loop to iterate through dictionaries, you'll need to work with the KeyValuePair structure. This structure represents a key-value pair in a dictionary.

Example:


    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 and for each: LINQ (Language Integrated Query) is a powerful feature in C# that allows you to query and manipulate data in a more declarative way. You can use LINQ with the for each loop to create more expressive and efficient code.

Example:


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

            // Use LINQ to filter out even numbers
            var evenNumbers = numbers.Where(n => n % 2 == 0);

            // Iterate through the even numbers using for each loop
            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 };

            // Use LINQ to filter out even numbers
            var evenNumbers = numbers.Where(n => n % 2 == 0);

            // Iterate through the even numbers using for each loop
            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}

			' Use LINQ to filter out even numbers
			Private evenNumbers = numbers.Where(Function(n) n Mod 2 = 0)

			' Iterate through the even numbers using for each loop
			For Each number In evenNumbers
				Console.WriteLine(number)
			Next number
VB   C#

Adding IronPDF Functionality to the C# for each Tutorial

In this section, we will extend our tutorial on the "C# for each" loop by introducing IronPDF, a popular library for working with PDF files in C#. We will demonstrate how to use the foreach loop in conjunction with IronPDF to generate a PDF report based on a collection of data.

Introduction of IronPDF

IronPDF is a powerful library for creating, editing, and extracting content from PDF files in C#. It provides an easy-to-use API for working with PDF documents, making it an excellent choice for developers who need to incorporate PDF functionality into their applications.

Some key features of IronPDF include:

  • Generating PDFs from HTML, URLs, and images

  • Editing existing PDF documents

  • Extracting text and images from PDFs

  • Adding annotations, form fields, and encryption to PDFs

Installing IronPDF

To get started with IronPDF, you'll need to install the IronPDF NuGet package. You can do this by running the following command in your project directory:

```shell
:ProductInstall

### Generating a PDF Report with IronPDF and for each

In this example, we will use the IronPDF library and the for each loop to create a PDF report of a list of products, including their names and prices.

First, let's create a simple **Product** class to represent the products:

```cs  

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

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

Next, let's create a list of Product objects to generate the PDF report:


    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#

Now, we can use IronPDF and the for each loop to generate a PDF report containing the product information:


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

    // Create a list of products
    List products = new List
    {
        new Product("Product A", 29.99m),
        new Product("Product B", 49.99m),
        new Product("Product C", 19.99m),
    };

    // Initialize an HTML string to store the report content
    string htmlReport = "Product ReportNamePrice";

    // Iterate through the list of products using for each loop
    foreach (var product in products)
    {
        // Add product information to the HTML report
        htmlReport += $"{product.Name}${product.Price}";
    }

    // Close the table tag in the HTML report
    htmlReport += "";

    // Create a new instance of the HtmlToPdf class
    var htmlToPdf = new ChromePdfRenderer();

    // Generate the PDF from the HTML report
    var PDF = htmlToPdf.RenderHtmlAsPdf(htmlReport);

    // Save the PDF to a file
    PDF.SaveAs("ProductReport.PDF");

    // Inform the user that the PDF has been generated
    Console.WriteLine("ProductReport.PDF has been generated.");

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

    // Create a list of products
    List products = new List
    {
        new Product("Product A", 29.99m),
        new Product("Product B", 49.99m),
        new Product("Product C", 19.99m),
    };

    // Initialize an HTML string to store the report content
    string htmlReport = "Product ReportNamePrice";

    // Iterate through the list of products using for each loop
    foreach (var product in products)
    {
        // Add product information to the HTML report
        htmlReport += $"{product.Name}${product.Price}";
    }

    // Close the table tag in the HTML report
    htmlReport += "";

    // Create a new instance of the HtmlToPdf class
    var htmlToPdf = new ChromePdfRenderer();

    // Generate the PDF from the HTML report
    var PDF = htmlToPdf.RenderHtmlAsPdf(htmlReport);

    // Save the PDF to a file
    PDF.SaveAs("ProductReport.PDF");

    // Inform the user that the PDF has been generated
    Console.WriteLine("ProductReport.PDF has been generated.");
Imports System
	Imports System.Collections.Generic
	Imports IronPdf

	' Create a list of products
	Private products As New List From {
		New Product("Product A", 29.99D),
		New Product("Product B", 49.99D),
		New Product("Product C", 19.99D)
	}

	' Initialize an HTML string to store the report content
	Private htmlReport As String = "Product ReportNamePrice"

	' Iterate through the list of products using for each loop
	For Each product In products
		' Add product information to the HTML report
		htmlReport &= $"{product.Name}${product.Price}"
	Next product

	' Close the table tag in the HTML report
	htmlReport &= ""

	' Create a new instance of the HtmlToPdf class
	Dim htmlToPdf = New ChromePdfRenderer()

	' Generate the PDF from the HTML report
	Dim PDF = htmlToPdf.RenderHtmlAsPdf(htmlReport)

	' Save the PDF to a file
	PDF.SaveAs("ProductReport.PDF")

	' Inform the user that the PDF has been generated
	Console.WriteLine("ProductReport.PDF has been generated.")
VB   C#

C# For Each (How It Works For Developers) Figure 1 - Output Result

Conclusion

Throughout this tutorial, we have explored the fundamentals of the "C# for each" loop, its importance, use cases, and how to implement it in your code. We also introduced IronPDF, a powerful library for working with PDF files in C#, and demonstrated how to use the for each loop in conjunction with IronPDF to generate a PDF report based on a collection of data.

Keep learning and building your skills, and you'll soon be able to harness the full potential of the for each loop and other C# features to create robust and efficient applications. IronPDF offers free trial for testing the library. If you decide to buy it, the IronPDF license starts from $749.