亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#從foreach語句中枚舉元素看數組詳解

2019-10-29 21:10:50
字體:
來源:轉載
供稿:網友

color: #ff0000">前言

foreach語句中使用枚舉,可以迭代數組或集合中的元素,且無須知道集合中的元素的個數。如圖顯示了調用foreach方法的客戶端和集合之間的關系。數組或集合實現帶GetEnumerator()方法的IEnumerable接口。GetEnumerator()方法返回一個實現lEnumerable接口的枚舉,接著foreach語句就可以使用IEnumerable接口迭代集合了。

GetEnumerator()方法用IEnumerable接口定義,foreach語句并不真的需要在集合類中實現這個接口。有一個名為GetEnumerator()的方法它返回實現了IEnumerator接口的對象就足夠了。

c,foreach,枚舉,foreach語句

先定義一個Person類,這個類有自動實現的屬性Firstname和Lastname,以及從Object類重寫ToString方法和繼承泛型接口IEquatable以比較兩個對象是否相等,實現泛型接口IComparer以比較兩個對象用來排序。

public class Person : IEquatable<Person>,IComparable<Person> {  public int Id { get; private set; }  public string FirstName { get; set; }  public string LastName { get; set; }  public override string ToString()  {   return String.Format("{0}, {1} {2}", Id, FirstName, LastName);  }   public bool Equals(Person other)  {   if (other == null)    return base.Equals(other);   return this.FirstName == other.FirstName && this.LastName == other.LastName;  }  public int CompareTo(Person other)  {   if (other == null) throw new ArgumentNullException("other");   int result = this.LastName.CompareTo(other.LastName);   if (result == 0)   {    result = this.FirstName.CompareTo(other.FirstName);   }   return result;  } }

創建一個三個元素的person數組,現對數組進行排序在用foreach循環訪問數組中的元素并輸出

 Person[] persons = {    new Person { FirstName = "Simen03", LastName = "Go" },    new Person { FirstName = "Simen02", LastName = "Go" },    new Person { FirstName = "Simen01", LastName = "Go" }   };   Array.Sort(persons);   foreach (var person in persons)    Console.WriteLine(person);

分析foreach (var person in persons)Console.WriteLine(person);這段代碼IL代碼

// loop start (head: IL_009b)   IL_008a: ldloc.2   IL_008b: ldloc.3   IL_008c: ldelem.ref   IL_008d: stloc.s person   IL_008f: ldloc.s person   IL_0091: call void [mscorlib]System.Console::WriteLine(object)   IL_0096: nop   IL_0097: ldloc.3   IL_0098: ldc.i4.1   IL_0099: add   IL_009a: stloc.3   IL_009b: ldloc.3   IL_009c: ldloc.2   IL_009d: ldlen   IL_009e: conv.i4   IL_009f: blt.s IL_008a  // end loop

C#的foreach語句不會解析為IL代碼中的foreach語句,C#編譯器會把foreach語句轉換為IEnumerable接口的方法和屬性,foreach語句使用IEnumerator接口的方法和屬性,迭代數組中的所有元素,為此,IEnumerator定義了Current屬性,來返回光標所在的元素,該接口的MoveNext()方法移動到數組的下一個元素上,如果有這個元素該方法就返回true否則返回false,這個接口的泛型版本IEnumerator派生自接口IDisposable,因此定義了Dispose()方法來清理枚舉器占用的資源,使用foreach語句會解析為下面的代碼段

 IEnumerator enumerator = persons.GetEnumerator();   while (enumerator.MoveNext())   {    var person = enumerator.Current;    Console.WriteLine(person);   }

為了方便的創建枚舉器,C#添加了yield語句,yield return 語句返回集合的一個元素,并移動到下一個元素,yield break 可停止迭代。使用迭代塊,編譯器會生成一個yield類型,其中包含一個狀態機,如下代碼段所示。yield 類型實現IEnumerator和IDisposable接口的屬性和方法。在下面的例子中,可以把yield類型看作內部類Enumerator.外部類的GetEnumerator()方法實例化并返回一個新的yield類型。在yield類型中,變量state定義了迭代的當前位置,每次調用MoveNext()時,當前位置都會改變,MoveNext()封裝了迭代代碼,并設置了current變量的值,從而使Current屬性根據位置返回一個對象。

 static void Main(string[] args)  {   var helloCollection = new HelloCollection();   foreach (string s in helloCollection)   {    Console.WriteLine(s);   }  }  public class HelloCollection  {   public IEnumerator<string> GetEnumerator()   {    yield return "Hello";    yield return "World";   }  }  public class HelloCollectionOther  {   public IEnumerator GetEnumertor()   {    return new Enumerator(0);   }   public class Enumerator : IEnumerator<string>, IEnumerator, IDisposable   {    private int state;    private string current;    public Enumerator(int state)    {     this.state = state;    }    public string Current => throw new NotImplementedException();    object IEnumerator.Current    {     get { return current; }    }    public void Dispose()    {     throw new NotImplementedException();    }    public bool MoveNext()    {     switch (state)     {      case 0:current = "hello";       state = 1;       return true;      case 1:current = "world";       state = 2;       return true;      case 2:       break;     }     return false;    }    public void Reset()    {     throw new NotImplementedException();    }   }  }

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久亚洲欧美日韩精品专区| 精品综合久久久久久97| 成人www视频在线观看| 麻豆国产va免费精品高清在线| 欧美丰满少妇xxxx| 日韩一区二区在线视频| 亚洲资源在线看| 成人激情视频小说免费下载| 欧美激情一区二区三区久久久| 国产精品视频最多的网站| 国产91精品不卡视频| 日韩动漫免费观看电视剧高清| 九九久久久久99精品| 精品一区二区三区四区| 国产有码一区二区| 91精品国产综合久久久久久久久| 欧美夜福利tv在线| 国产成人自拍视频在线观看| 国产亚洲欧美另类中文| 久久99精品国产99久久6尤物| 日韩中文理论片| 国产精品精品视频一区二区三区| 国产欧美一区二区三区久久| 欧美视频在线看| 97国产真实伦对白精彩视频8| 欧美性猛交xxxx乱大交| 日韩欧美福利视频| 清纯唯美亚洲激情| 亚洲xxxx在线| 九九热r在线视频精品| 国产精品永久免费观看| 日韩av网站电影| 国自产精品手机在线观看视频| 亚洲天堂免费在线| 国产精品96久久久久久| 欧美亚洲激情视频| 全亚洲最色的网站在线观看| 欧美日韩激情美女| 亚洲最新在线视频| 高清欧美一区二区三区| 久久精品视频在线| 午夜精品美女自拍福到在线| 亚洲欧美日韩精品久久| 狠狠躁夜夜躁人人躁婷婷91| 日韩美女av在线免费观看| 在线精品播放av| 九九热精品视频在线播放| 欧美激情视频免费观看| 在线视频日本亚洲性| 2019中文字幕在线观看| 日韩日本欧美亚洲| 日韩av123| 18性欧美xxxⅹ性满足| 欧美综合国产精品久久丁香| 亚洲第一二三四五区| 清纯唯美亚洲激情| 国产精品嫩草影院一区二区| 国产精品久久久久久久久久三级| 亚洲日本中文字幕免费在线不卡| 欧美视频13p| 性夜试看影院91社区| 国产精品老牛影院在线观看| 97在线视频精品| 国外成人在线播放| 亚洲视频在线播放| 亚洲欧美精品伊人久久| 久久视频国产精品免费视频在线| 久久久久久久久综合| 永久免费精品影视网站| 日本中文字幕久久看| 欧美福利在线观看| 最新国产成人av网站网址麻豆| 亚洲一区二区黄| 国产女精品视频网站免费| 久久久女女女女999久久| 精品视频—区二区三区免费| 欧美日韩在线观看视频小说| 这里只有精品久久| 欧美亚洲在线观看| 91老司机精品视频| 影音先锋日韩有码| 国产一区二区三区在线播放免费观看| 久久天天躁狠狠躁夜夜av| 国产一区二区三区中文| 97精品在线视频| 久久免费成人精品视频| 亚洲精品自拍第一页| 91免费看国产| 久久久女人电视剧免费播放下载| 中文字幕精品www乱入免费视频| 欧美老肥婆性猛交视频| 欧美成人中文字幕| 亚洲一区二区三区四区在线播放| 国产精品午夜一区二区欲梦| 欧美国产乱视频| 97成人在线视频| 在线精品91av| 精品视频在线播放色网色视频| 亚洲成人亚洲激情| 亚洲天堂av图片| 超碰日本道色综合久久综合| 日本亚洲欧洲色α| 久久久成人av| 亚洲欧美日韩中文在线制服| 欧美国产在线电影| 中文字幕一精品亚洲无线一区| 欧美激情久久久久| 亚洲精品v欧美精品v日韩精品| 精品久久久国产| 久久免费少妇高潮久久精品99| 亚洲性av网站| 欧美激情视频一区| 午夜精品三级视频福利| 亚洲国产精品高清久久久| 国产精品吊钟奶在线| 国产精品无av码在线观看| 亚洲欧美成人网| 亚洲精品一区av在线播放| 国色天香2019中文字幕在线观看| 精品久久久久久久久久久| 久久99精品久久久久久青青91| 欧美丰满少妇xxxxx做受| 俺去亚洲欧洲欧美日韩| 日韩高清电影免费观看完整| 国产精品一区久久久| 欧美成人午夜激情视频| 成人性生交xxxxx网站| 亚洲视频一区二区| 久久影视电视剧凤归四时歌| 国产精品久久久久久久电影| 福利二区91精品bt7086| 久久综合免费视频| 亚洲国产精品99久久| 美日韩精品免费观看视频| 国产福利成人在线| 欧美激情综合色| 国产在线久久久| 57pao成人国产永久免费| 亚洲国产欧美精品| 国产精品视频一区国模私拍| 国语自产精品视频在免费| 日韩欧美在线免费观看| 日韩免费观看网站| 亚洲成人精品视频| 亚洲第一福利在线观看| 久久精品99无色码中文字幕| 另类美女黄大片| 日韩精品视频三区| 国产精品免费久久久久久| 国产精品自拍网| 国产精品扒开腿做爽爽爽男男| 亚洲综合色av| 国产91精品视频在线观看| 成人免费自拍视频| 亚洲电影免费观看高清完整版在线| 国产国语videosex另类| 久久久久久这里只有精品| 亚洲综合一区二区不卡| 中文字幕免费精品一区| 中文字幕欧美在线| 亚洲成人激情小说| 国产日产久久高清欧美一区| 亚洲丁香婷深爱综合| 九九九热精品免费视频观看网站|