zoukankan      html  css  js  c++  java
  • C#3.0学习笔记(11)枚举数和foreach语句实现原理

    1, 可枚举类型和枚举数?

           可枚举类型:实现了GetEnumerator方法的类型,并且它返回用于项的枚举数。

           枚举数:枚举数是可以依次返回集合中项的类对象。一般是可枚举类型对象调用GetEnumerator方法来获取枚举数对象。

           下图解释了可枚举类型和枚举数之间的关系:

          

    2, foreach语句实现原理?

           foreach语句是被设计用来和可枚举类型一起使用。只要它的遍历对象是可枚举类型。

           比如数组,它就会执行以下动作来实现遍历输出。

      1>    通过调用GetEnumerator方法获取对象的枚举数。

      2>    从枚举数中请求每一项并且把它作为迭代变量,代码可以读但不可以改。

      例如:

    //方法一:使用IEnumerator接口的MoveNext方法和Current属性来模仿foreach循环遍历数组效果。

      class Program

    {

    static voidMain(string[] args)

    {

    int[] arr = { 1,2,3,4,5}; //声明并初始化数组。

    IEnumerator ie = arr.GetEnumerator(); //调用可枚举类型的GetEnumerator方法获得枚举数对象。

    while (ie.MoveNext()) //调用IEnumerator接口的MoveNext方法移到下一项。实现遍历数组。

    {

    int i = (int)ie.Current; //调用IEnumerator接口的Current方法获取当前项。注意它返回的是object类型,需要强制转换类型。

    Console.WriteLine("{0}",i);

    }

    Console.ReadKey();

    }

    }

      程序输出结果为:

      

         //方法二:使用foreach来遍历数组:

      class Program

    {

    static voidMain(string[] args)

    {

    int[] arr = { 1, 2, 3, 4, 5 }; //声明并初始化数组。

    foreach (int item in arr) //使用foreach语句遍历数组。

    {

    Console.WriteLine("{0}",item);

    }

    Console.ReadKey();

    }

    }

       程序输出结果与上面一样。

  • 相关阅读:
    【动态规划】CDOJ1651 Uestc的命运之旅
    【动态规划】【二分】CDOJ1006 最长上升子序列
    【动态规划】CDOJ1271 Search gold
    【概率dp】【滚动数组】CDOJ1652 都市大飙车
    【混合背包】CDOJ1606 难喝的饮料
    【状压dp】CDOJ1608 暑假集训
    【构造】CDOJ1607 大学生足球联赛
    【二分】Codeforces Round #417 (Div. 2) C. Sagheer and Nubian Market
    【动态规划】Codeforces Round #417 (Div. 2) B. Sagheer, the Hausmeister
    HBase简介
  • 原文地址:https://www.cnblogs.com/mcgrady/p/2246867.html
Copyright © 2011-2022 走看看