C# 中的 Foreach 循环

本文关键字:循环 Foreach 中的 | 更新日期: 2023-09-21 10:32:22

在 C# 中,foreach 循环迭代集合类型,如数组、数组列表、列表、哈希表、字典等。 它可以与实现IEnumerable接口的任何类型一起使用。

Syntax:

foreach (var item in collection)
{
	//access item
																
}

下面的示例演示使用 foreach 循环对array进行迭代。

示例: Iterate an Array

string[] carCompanies = { "Tata Motors", "Mahindra", "Volkswagen", "Toyota" };
																
foreach(string car in carCompanies)
{
	Console.WriteLine("{0}", car);
} 

输出:

Tata Motors
Mahindra
Volkswagen
Toyota

下面的示例演示 list 集合上的 foreach 循环。

示例: Iterate a List

List<int> oddNumbers = new List<int>() { 1, 3, 5, 7, 9};
																
foreach(int num in oddNumbers)
{
	Console.Write(num);
}
oddNumbers.ForEach(num => Console.Write(num)); //using ForEach extension method

13579

System.Collections.Generic命名空间包含可与任何内置集合类(如 List、Dictionary、SortedList 等)一起使用的 ForEach() 扩展方法。

要点:

  • foreach 循环只向前迭代。
  • 与 for 循环相比,每个循环的性能方面需要花费很多时间。因为在内部它使用额外的内存空间以及。
  • foreach 循环使用 IEnumerable 接口GetEnumarator()方法。因此,foreach 循环可以与已实现接口的任何类一起使用。
  • 通过使用中断、返回、转到和抛出退出 foreach 循环。

下面的示例演示 dictionary 集合上的 foreach 循环。

示例: Iterate a Dictionary

var citiesOfCountry = new Dictionary<string, string>()
{
	{"UK", "London, Manchester, Birmingham"},
	{"USA", "Chicago, New York, Washington"},
	{"India", "Mumbai, New Delhi, Pune"}
};
																
foreach(var city in citiesOfCountry)
{
	Console.WriteLine("{0}, {1}", city.Key, city.Value);
}

输出:

UK, London, Manchester, Birmingham
USA, Chicago, New York, Washington,
India, Mumbai, New Delhi, Pune

实现 IEnumerable 接口(Implement IEnumerable Interface)

如前所述,foreach 循环可用于迭代已实现 IEnumerable 接口的任何类。 下面的示例演示如何实现 IEnumerable 接口以便将 foreach 循环与自定义类一起使用。

示例: Implement IEnumerable Interface

using System;
using System.Collections;
using System.Collections.Generic;
class Customer
{
	public int Id { get; set; }
	public string Name { get; set; }
}    
																
class Shop : IEnumerable
{
	private Customer[] custArray = new Customer[4];
																
	public Shop()
	{
		custArray[0] = new Customer() { Id = 1, Name = "Steve" };
		custArray[1] = new Customer() { Id = 2, Name = "Paul" };
		custArray[2] = new Customer() { Id = 3, Name = "Joe" };
		custArray[3] = new Customer() { Id = 4, Name = "Yash" };
	}
																
	//Here implementation for the GetEnumerator method.
	public IEnumerator GetEnumerator()
	{
		return custArray.GetEnumerator();
	}
}
																
class Program
{
	public static void Main(string[] args)
	{
		Shop objShop = new Shop();
																
		foreach (Customer cust in objShop)
		{
			Console.WriteLine(cust.Name);
		}
	}
}

输出:

Steve
Paul
Joe
Yash

如上所述,Shop 类实现了包含 GetEnumerator() 方法的 IEnumerable 接口。 这将使 Shop 类能够与返回Customer对象的 foreach 循环一起使用。


本文内容总结: