日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

來源:程序員人生   發布時間:2016-02-28 11:09:04 閱讀次數:2420次

上1篇結尾的時候我留下了幾個問題,由于要斷電了沒有解決,這1篇我們繼續上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循環遍歷寫入 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]+" "+((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循環中,只要MoveNext()返回true,就1直循環下去 while (per.MoveNext()) { //用Current屬性訪問數組中的元素 string p = (string)per.Current; Console.WriteLine(p); } } } }


結果都1樣:


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


foreach語句遍歷自定義類:

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

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; //添加這個很有必要 namespace Test1 {//定義cinema繼承IEnumerable接口實現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參數 } //實現GetEnumerator方法 public IEnumerator GetEnumerator() { return new ienumerator(seat); //利用構造方法傳入seat參數 } //由于上面返回值的需要所以繼承接口IEnumerator并實現方法 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]; } } //定義向下移動的規則 public bool MoveNext() { index++; //索引下1個坐位號的位置 if (index <= 15) { return true; } else return false; } //由于這個程序中用不到這個方法所以不實現,但是必須得寫上否則會報錯 public void Reset() { } } } 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 + "列"; } } //調用foreach語句遍歷輸出 foreach (string i in movieroom) { Console.WriteLine(i+" "+(cinema.index+1)+"號"); } } } }


結果:

結果是1樣的。。。。

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 色综综 | 成人久久久久 | 牲高潮99爽久久久久777 | 天天操夜操视频 | 黄色片在线免费观看 | 国产精品成人自拍 | 高清国产一区二区三区 | 日韩一区二区三区在线 | 日本a v网站 | 三级视频网站在线观看 | 成人福利网| av不卡在线播放 | 欧美日韩在线精品 | 日本一区二区三区免费观看 | 国产精品一区二区在线观看 | 91国产精品 | 欧美在线免费 | 久草免费福利 | 欧美人xxx | 国产精品区一区二区三区 | av中文字幕一区二区 | 国产成人高清 | 嫩呦国产一区二区三区av | 国产一区二区精品免费 | 男女毛片 | 最新中文字幕视频 | 久久九九久久九九 | 国产精品亚洲一区 | 99久久久久 | 九色一区 | 成人福利免费在线观看 | av在线免费不卡 | 天堂蜜桃一区二区三区 | 老牛影视av一区二区在线观看 | 国产一区观看 | 日韩欧美精品一区二区三区经典 | 中文字幕福利 | 久久都是精品 | 精品国产精品国产偷麻豆 | 男女精品视频 | 日韩在线视频一区二区三区 |