C# 也支持 foreach 循环,使用foreach可以迭代数组或者一个集合对象。
以下实例有三个部分:
通过 foreach 循环输出整型数组中的元素。 通过 for 循环输出整型数组中的元素。 foreach 循环设置数组元素的计算器。
class Program
{
static void Main(string[] args)
{
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);
}
}
输出了
0
1
1
2
3
5
8
13
0
1
1
2
3
5
8
13
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
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();
}
}
}
输出
aa
bb
cc
还可以直接用 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";
}
}
输出
red
green
blue
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.这样不会比较不会引起 边界问题
从 C# 8.0 开始,您可以使用 await foreach 语句来消费异步数据流,即实现 IAsyncEnumerable
await foreach (var item in GenerateSequenceAsync())
{
Console.WriteLine(item);
}