最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#:foreach與yield語句的介紹

 更新時間:2013年03月08日 14:40:08   作者:  
C#:foreach與yield語句的介紹,需要的朋友可以參考一下

1. foreach語句

C#編譯器會把foreach語句轉(zhuǎn)換為IEnumerable接口的方法和屬性。

復(fù)制代碼 代碼如下:

 foreach (Person p in persons)
 {
 Console.WriteLine(p);
 }

foreach語句會解析為下面的代碼段。

•調(diào)用GetEnumerator()方法,獲得數(shù)組的一個枚舉
•在while循環(huán)中,只要MoveNext()返回true,就一直循環(huán)下去
•用Current屬性訪問數(shù)組中的元素

復(fù)制代碼 代碼如下:

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

2. yield語句

•yield語句的兩種形式:

復(fù)制代碼 代碼如下:

 yield return <expression>;
 yield break;
 

•使用一個yield return語句返回集合的一個元素
•包含yield語句的方法或?qū)傩允堑?。迭代器必須滿足以下要求
a. 返回類型必須是IEnumerable、IEnumerable<T>、IEnumerator或 IEnumerator<T>。

b. 它不能有任何ref或out參數(shù)

•yield return語句不能位于try-catch快。yield return語句可以位于try-finally的try塊

復(fù)制代碼 代碼如下:

try
             {
                 // ERROR: Cannot yield a value in the boday of a try block with a catch clause
                 yield return "test";
             }
             catch
             { }

             try
             {
                 //
                 yield return "test again";
             }
             finally
             { }

             try
             { }
             finally
             {
                 // ERROR: Cannot yield in the body of a finally clause
                 yield return "";
             }

yield break語句可以位于try塊或catch塊,但是不能位于finally塊
 

下面的例子是用yield return語句實現(xiàn)一個簡單集合的代碼,以及用foreach語句迭代集合

復(fù)制代碼 代碼如下:

using System;
 using System.Collections.Generic;

 namespace ConsoleApplication6
 {
     class Program
     {
         static void Main(string[] args)
         {
             HelloCollection helloCollection = new HelloCollection();
             foreach (string s in helloCollection)
             {
                 Console.WriteLine(s);
                 Console.ReadLine();
             }
         }
     }

     public class HelloCollection
     {

         public IEnumerator<String> GetEnumerator()
         {
             // yield return語句返回集合的一個元素,并移動到下一個元素上;yield break可以停止迭代
             yield return "Hello";
             yield return "World";
         }
     }
 }

使用yield return語句實現(xiàn)以不同方式迭代集合的類:

復(fù)制代碼 代碼如下:

using System;
 using System.Collections.Generic;

 namespace ConsoleApplication8
 {
     class Program
     {
         static void Main(string[] args)
         {
             MusicTitles titles = new MusicTitles();
             foreach (string title in titles)
             {
                 Console.WriteLine(title);
             }
             Console.WriteLine();

             foreach (string title in titles.Reverse())
             {
                 Console.WriteLine(title);
             }
             Console.WriteLine();

             foreach (string title in titles.Subset(2, 2))
             {
                 Console.WriteLine(title);
                 Console.ReadLine();
             }
         }
     }

     public class MusicTitles
     {
         string[] names = { "a", "b", "c", "d" };
         public IEnumerator<string> GetEnumerator()
         {
             for (int i = 0; i < 4; i++)
             {
                 yield return names[i];
             }
         }

         public IEnumerable<string> Reverse()
         {
             for (int i = 3; i >= 0; i--)
             {
                 yield return names[i];
             }
         }

         public IEnumerable<string> Subset(int index, int length)
         {
             for (int i = index; i < index + length; i++)
             {
                 yield return names[i];
             }
         }
     }
 }

輸出:

相關(guān)文章

  • C#實現(xiàn)進制轉(zhuǎn)換

    C#實現(xiàn)進制轉(zhuǎn)換

    這篇文章介紹了C#實現(xiàn)進制轉(zhuǎn)換的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • C# 未將對象引用設(shè)置到對象的實例

    C# 未將對象引用設(shè)置到對象的實例

    c#開發(fā)過程中出現(xiàn)未將對象引用設(shè)置到對象的實例,錯誤一般是下面的原因,軟件中也是因為沒有獲取到數(shù)據(jù)導(dǎo)致,需要的朋友可以參考下
    2022-09-09
  • C# 字符串多行顯示/文本換行以textbox為例講解

    C# 字符串多行顯示/文本換行以textbox為例講解

    C# 字符串多行顯示、文本換行以textbox為例講為大家詳細介紹并附演示效果圖及演示代碼,感興趣的朋友可以了解下,或許對你學習字符串換行有所幫助
    2013-02-02
  • C#表達式樹講解

    C#表達式樹講解

    本文詳細講解了C#表達式樹的創(chuàng)建、生成和使用,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • c#對字符串操作的技巧小結(jié)

    c#對字符串操作的技巧小結(jié)

    c#對字符串操作的技巧小結(jié),需要的朋友可以參考一下
    2013-04-04
  • 學會使用C#異常

    學會使用C#異常

    在C#中,程序中在運行時出現(xiàn)的錯誤,會不斷在程序中進行傳播,這種機制稱為“異?!?。 異常通常由錯誤的代碼引發(fā),并由能夠更正錯誤的代碼進行catch。本文將對C#異常簡要分析說明,下面就跟著小編一起來看下吧
    2016-12-12
  • C#中richtextbox使用方法詳解

    C#中richtextbox使用方法詳解

    這篇文章主要介紹了C#中richtextbox使用方法,分析較為詳盡,需要的朋友可以參考下
    2014-07-07
  • 輕松學習C#的抽象類

    輕松學習C#的抽象類

    輕松學習C#的抽象類,對C#的抽象類感興趣的朋友可以參考本篇文章,幫助大家更靈活的運用C#的抽象類
    2015-11-11
  • C#?使用?Filestream?修改大文件指定位置數(shù)據(jù)

    C#?使用?Filestream?修改大文件指定位置數(shù)據(jù)

    這篇文章主要介紹了C#?使用?Filestream修改大文件指定位置數(shù)據(jù),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • C#程序最小化到托盤圖標操作步驟與實現(xiàn)代碼

    C#程序最小化到托盤圖標操作步驟與實現(xiàn)代碼

    設(shè)置窗體屬性showinTask=false;加notifyicon控件notifyIcon1,為控件notifyIcon1的屬性Icon添加一個icon圖標;添加窗體最小化事件(首先需要添加事件引用)接下來介紹實現(xiàn)代碼,感興趣的朋友可以研究下
    2012-12-12

最新評論

宁德市| 神池县| 河源市| 永寿县| 揭西县| 顺平县| 柘荣县| 芜湖市| 惠东县| 阳江市| 鹰潭市| 阳新县| 陆河县| 定南县| 上饶县| 随州市| 巢湖市| 福清市| 蓬溪县| 丰都县| 安吉县| 乌拉特后旗| 多伦县| 本溪| 新闻| 台前县| 怀柔区| 措勤县| 万州区| 鹤山市| 镇江市| 榆林市| 康平县| 普格县| 海南省| 遵化市| 万源市| 余姚市| 永胜县| 当阳市| 綦江县|