多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > php教程 > C#學習日記29----二維索引器 與 foreach遍歷索引器

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

來源:程序員人生   發(fā)布時間:2016-02-28 11:09:04 閱讀次數:2413次

上1篇結尾的時候我留下了幾個問題,由于要斷電了沒有解決,這1篇我們繼續(xù)上1篇的內容。點這里回到上1篇

問題1:

數組有多維度的,索引器也能夠是多維的嗎???

索引器可以是多維的,上1篇中我們定義的索引器只是1維索引器,同數組1樣可以定義多維索引器。比如我們索引電影院的1個放映室的坐位號,第1排第1列為1號,1排2列為2號……以下:

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test1 {//定義cinema類包括1個2維數組與1個2維訪問器 class cinema {//定義1個2維數組 private string[,] seat = new string[5, 5]; //定義1個2維訪問器 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循環(huán)遍歷寫入 for (uint i = 1; i < 5; i++) { for (uint j = 1; j < 5; j++) { movieroom[i, j] = "第" + i + "排 第" + j + "列"; } } //for循環(huán)遍歷讀出 for (uint i = 1; i < 5; i++) { for (uint j = 1; j < 5; j++) { Console.WriteLine(movieroom[i,j]+" "+((i⑴)*4+j)+"號"); } } } } }


結果:


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


問題2:

數組能夠使用foreach語句進行簡單快捷的遍歷,索引器也能使用foreach語句遍歷么???

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

foreach語句:

C#中編譯器會把foreach語句轉化為IEnumerable接口的方法和屬性,比如:

string[] str = new string[] { "HC1", "HC2", "HC3", "HC4" };//定義1個數組 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" }; //定義1個數組 //調用GetEnumerator()方法,取得數組的1個枚舉 IEnumerator per = str.GetEnumerator(); //在while循環(huán)中,只要MoveNext()返回true,就1直循環(huán)下去 while (per.MoveNext()) { //用Current屬性訪問數組中的元素 string p = (string)per.Current; Console.WriteLine(p); } } } }


結果都1樣:


我們對string查看定義發(fā)現(xiàn),string繼承于IEnumerable接口,IEnumerable接口中只有1個方法GetEnumerator();(該方法已在string類中被實現(xiàn)了該方法的作用是,返回1個循環(huán)訪問集合的枚舉器IEnumerator,我們在轉IEnumerator的定義,它也是1個接口,里面只有3個方法的聲明,Current(獲得集合中確當前元素),MoveNext(將枚舉數推動到集合的下1個元素,成功返回true,超出結尾返回false),Reset( 將枚舉數設置為其初始位置,該位置位于集合中第1個元素之前),也就是說,如果在我們自定義的類中沒有實現(xiàn)GetEnumerator方法,和Current、MoveNext方法,就不能使用foreach語句遍歷了。


foreach語句遍歷自定義類:

還是上面電影院的例子,不過這次我們不用for循環(huán)輸出,而是實現(xiàn)foreach語句遍歷輸出,以下:

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; //添加這個很有必要 namespace Test1 {//定義cinema繼承IEnumerable接口實現(xiàn)GetEnumerator()功能 class cinema:IEnumerable {//定義1個2維數組 private string[,] seat = new string[5, 5]; //定義坐位號碼 static public int index=⑴; //定義1個2維索引器 public string this[uint a, uint b] { get { return seat[a, b]; } set { seat[a, b] = value; }//set訪問器自帶value參數 } //實現(xiàn)GetEnumerator方法 public IEnumerator GetEnumerator() { return new ienumerator(seat); //利用構造方法傳入seat參數 } //由于上面返回值的需要所以繼承接口IEnumerator并實現(xiàn)方法 private class ienumerator:IEnumerator { private string[,] seats; //將傳入的seat數組賦給它 public ienumerator(string[,] s) { seats = s; } //定義Current的只讀屬性 public object Current { //根據坐位號推算數組的坐標也就是物理位置 get { return seats[1+(index/4), (index%4)+1]; } } //定義向下移動的規(guī)則 public bool MoveNext() { index++; //索引下1個坐位號的位置 if (index <= 15) { return true; } else return false; } //由于這個程序中用不到這個方法所以不實現(xiàn),但是必須得寫上否則會報錯 public void Reset() { } } } class Program { static void Main(string[] args) { cinema movieroom = new cinema();//實例化 //for循環(huán)索引寫入 for (uint i = 1; i < 5; i++) { for (uint j = 1; j < 5; j++) { movieroom[i, j] = "第" + i + "排 第" + j + "列"; } } //調用foreach語句遍歷輸出 foreach (string i in movieroom) { Console.WriteLine(i+" "+(cinema.index+1)+"號"); } } } }


結果:

結果是1樣的。。。。

版權聲明:本文為博主原創(chuàng)文章,未經博主允許不得轉載。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 中文字幕在线观看网址 | 亚洲伊人精品 | 色吊丝在线观看 | 国产精品久草 | 日本理论午夜中文字幕第一页 | 亚洲在线观看免费 | 亚洲精品成人 | 伊人久久中文大香线蕉综合 | 中文字幕精品一区二区三区视频 | 国产中文字幕视频在线观看 | 欧美性精品videofree | 亚洲欧美日韩高清 | 在线精品自拍亚洲第一区 | 日韩乱轮| 久久久国产精品免费看 | 亚洲天堂麻豆 | 国产精品精品视频 | 色中色在线视频 | 欧美娇小www| 国产亚洲精品成人一区看片 | 欧美3p在线观看一区二区三区 | 欧美精品超清在线播放 | 亚洲日韩aⅴ在线视频 | 亚洲三级视频在线观看 | 毛片影视| 国产69精品久久久久99不卡 | 亚洲色图校园春色 | 欧美成人三级一区二区在线观看 | 亚洲生活片 | 视频在线免费看 | 午夜看片网站 | 国产成人啪一区二区 | 最新精品亚洲成a人在线观看 | 国产一区免费在线观看 | 日本一级毛片免费播放 | 99久久精品国产国产毛片 | japanese欧美| 亚洲a在线播放 | 亚洲欧美在线观看视频 | 天堂网在线网站成人午夜网站 | 久久免费视频一区 |