int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
foreach (int element in fibarray)
System.Console.WriteLine(element);
System.Console.WriteLine();
// 类似 foreach 循环
for (int i = 0; i < fibarray.Length; i++)
System.Console.WriteLine(fibarray[i]);
System.Console.WriteLine();
// 设置集合中元素的计算器
int count = 0;
foreach (int element in fibarray)
count += 1;
System.Console.WriteLine("Element #{0}: {1}", count, element);
System.Console.WriteLine("Number of elements in the array: {0}", count);
Element #1: 0
Element #2: 1
Element #3: 1
Element #4: 2
Element #5: 3
Element #6: 5
Element #7: 8
Element #8: 13
Number of elements in the array: 8
只要有实现了
System.Collections.IEnumerable or System.Collections.Generic.IEnumerable
接口的类。
我们都可以用foreach例举它的所有元素
示例:如下。
class Program
static void Main(string[] args)
foreach (var item in new Test())
Console.WriteLine(item);
public class Test : IEnumerable<string>
private List<string> Data = new List<string>() { "aa", "bb", "cc" };
public IEnumerator<string> GetEnumerator()
return Data.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
return Data.GetEnumerator();
还可以直接用 yield
来生成一个 IEnumerable的接口 如下示例
class Program
static void Main(string[] args)
var colors = Color();
foreach (var item in colors)
Console.WriteLine(item);
//使用yield可以让我们方便实现 IEnumerable
public static IEnumerable<string> Color() //迭代器
yield return "red";
yield return "green";
yield return "blue";
green
string 这个类也是支持foreach的
从它的代码可以看到 public sealed class String : IEnumerable<char>
class Program
static void Main(string[] args)
var s = "malema.net";
foreach (var item in s)
Console.Write(item);
malema.net
推荐用 foreach替代 for.这样不会比较不会引起 边界问题
await foreach
从 C# 8.0 开始,您可以使用 await foreach 语句来消费异步数据流,即实现 IAsyncEnumerable 接口的集合类型。 当异步检索下一个元素时,可以暂停循环的每次迭代。 以下示例显示了如何使用 await foreach 语句:
await foreach (var item in GenerateSequenceAsync())
Console.WriteLine(item);