首頁  >  文章  >  後端開發  >  C#學習日記29----二維索引器 與 foreach遍歷索引器

C#學習日記29----二維索引器 與 foreach遍歷索引器

黄舟
黄舟原創
2017-01-21 15:43:031594瀏覽

上一篇結尾的時候我留下了幾個問題,因為要斷電了沒有解決,這篇我們繼續上一篇的內容。點這裡回到上一個

問題1:

        數組有多個維度的,而索引器也可以是多維度的嗎? ? ?

         索引器可以是多維的,而上一篇我們定義的索引器只是一維索引器,而同陣列一樣可以定義多維索引器。例如我們索引電影院的一個放映室的座位號,第一排第一列為1號,一排2列為2號…如下:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
  
namespace Test1  
{//定义cinema类包含一个二维数组与一个二维访问器  
    class cinema  
    {//定义一个二维数组  
        private string[,] seat = new string[5, 5];  
    //定义一个二维访问器  
        public string this[uint a, uint b]  
        {  
            get { return seat[a, b]; }  
            set { seat[a, b] = value; }  
          
        }  
      
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            cinema movieroom = new cinema();//实例化  
            //for循环遍历写入  
            for (uint i = 1; i < 5; i++)  
            {  
                for (uint j = 1; j < 5; j++)  
                {  
                    movieroom[i, j] = "第" + i + "排 第" + j + "列";  
                }  
            }  
            //for循环遍历读出  
            for (uint i = 1; i < 5; i++)  
            {  
                for (uint j = 1; j < 5; j++)  
                {  
                    Console.WriteLine(movieroom[i,j]+"\t"+((i-1)*4+j)+"号");               
                  
                }  
              
            }  
        }  
    }  
}

結果:

C#學習日記29----二維索引器 與 foreach遍歷索引器

二維的索引器就是如此了,其他多維數的都以此類推,就不介紹了。

 

問題2:

        已使用且有使用foreach語句進行簡單快速的遍歷,索引器也能使用foreach語句遍歷麼? ? ?

          這個也是可以的,解決這個問題的時候有必要弄清楚foreach的執行步驟與原則.

foreach語句:

     

string[] str = new string[] { "HC1", "HC2", "HC3", "HC4" };//定义一个数组  
            foreach (string i in str)//使用foreach遍历  
            {  
                Console.WriteLine(i);  
            }

    然而foreach語句會被解析為下面的程式碼段。

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Collections; //注意添加这个命名空间,否则没有IEnumerator这个类  
  
namespace Example  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            string[] str = new string[] {"HC1","HC2","HC3","HC4" }; //定义一个数组  
          //调用GetEnumerator()方法,获得数组的一个枚举  
            IEnumerator per = str.GetEnumerator();  
          //在while循环中,只要MoveNext()返回true,就一直循环下去  
            while (per.MoveNext())  
            {  
                //用Current属性访问数组中的元素  
                string p = (string)per.Current;  
                Console.WriteLine(p);  
            }  
        }  
    }  
}

結果都一樣:

C#學習日記29----二維索引器 與 foreach遍歷索引器


我們對string查看定義發現,string繼承於IEnumerable接口,IEnumerable接口中只有一個方法GetEnumerator();該方法的作用是,返回一個循環訪問集合的枚舉器IEnumerator,我們在轉IEnumerator的定義,它也是一個接口,裡面只有三個方法的聲明,Current(獲取集合中的當前元素),MoveNext(將枚舉數推進到集合的下一個元素,成功返回true,越過結尾返回false),Reset( 將枚舉數設為其初始位置,該位置位於集合中第一個元素之前),也就是說,如果在我們自訂的類別中沒有實作GetEnumerator方法,以及Current、MoveNext方法,就不能使用foreach語句遍歷了。

 

foreach語句遍歷自訂類別:

         或是上面電影院的例子,但這次我們不使用一個循環輸出,而是實現結果一樣的。 。 。 。

以上就是 C#學習日記29----二維索引器 與 foreach遍歷索引器的內容,更多相關內容請關注PHP中文網(www.php.cn)!

C#學習日記29----二維索引器 與 foreach遍歷索引器

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn