上一篇結尾的時候我留下了幾個問題,因為要斷電了沒有解決,這篇我們繼續上一篇的內容。點這裡回到上一個
問題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)+"号"); } } } } }
結果:
二維的索引器就是如此了,其他多維數的都以此類推,就不介紹了。
問題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); } } } }
結果都一樣:
我們對string查看定義發現,string繼承於IEnumerable接口,IEnumerable接口中只有一個方法GetEnumerator();該方法的作用是,返回一個循環訪問集合的枚舉器IEnumerator,我們在轉IEnumerator的定義,它也是一個接口,裡面只有三個方法的聲明,Current(獲取集合中的當前元素),MoveNext(將枚舉數推進到集合的下一個元素,成功返回true,越過結尾返回false),Reset( 將枚舉數設為其初始位置,該位置位於集合中第一個元素之前),也就是說,如果在我們自訂的類別中沒有實作GetEnumerator方法,以及Current、MoveNext方法,就不能使用foreach語句遍歷了。
foreach語句遍歷自訂類別:
或是上面電影院的例子,但這次我們不使用一個循環輸出,而是實現結果一樣的。 。 。 。
以上就是 C#學習日記29----二維索引器 與 foreach遍歷索引器的內容,更多相關內容請關注PHP中文網(www.php.cn)!