添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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);