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

C#:foreach與yield語句的介紹

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

1. foreach語句

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

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

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

foreach語句會(huì)解析為下面的代碼段。

•調(diào)用GetEnumerator()方法,獲得數(shù)組的一個(gè)枚舉
•在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;
 

•使用一個(gè)yield return語句返回集合的一個(gè)元素
•包含yield語句的方法或?qū)傩允堑鳌5鞅仨殱M足以下要求
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語句實(shí)現(xiàn)一個(gè)簡(jiǎ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語句返回集合的一個(gè)元素,并移動(dòng)到下一個(gè)元素上;yield break可以停止迭代
             yield return "Hello";
             yield return "World";
         }
     }
 }

使用yield return語句實(shí)現(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#實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換

    C#實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換

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

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

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

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

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

    C#表達(dá)式樹講解

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

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

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

    學(xué)會(huì)使用C#異常

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

    C#中richtextbox使用方法詳解

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

    輕松學(xué)習(xí)C#的抽象類

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

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

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

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

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

最新評(píng)論

策勒县| 河源市| 永州市| 祥云县| 临夏县| 西吉县| 栾川县| 新竹县| 精河县| 台前县| 图木舒克市| 从化市| 滁州市| 通城县| 惠州市| 贵定县| 静宁县| 安图县| 茌平县| 吉林省| 吴桥县| 麟游县| 陕西省| 涡阳县| 和林格尔县| 青田县| 昌平区| 吴旗县| 通海县| 龙江县| 红河县| 左权县| 岳阳县| 那曲县| 延吉市| 旬邑县| 南丰县| 潼南县| 崇礼县| 无为县| 浦东新区|