久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C# 中yield 用法 - MIDI - 博客園

 woshishenxiande 2011-05-24
1.yield return 語(yǔ)句,,由于yield return 并不對(duì)應(yīng)多余的il指令,。所以編譯器就會(huì)在編譯的時(shí)候,生成一個(gè)實(shí)現(xiàn)Ienumator接口的類.并且自動(dòng)維護(hù)該類的狀態(tài).比如movenext,

2. 使用yield return 很容易實(shí)現(xiàn)遞歸調(diào)用中的迭代器. 如果以上的問(wèn)題,不使用yield return的話,可想而知.要么你先把所有的結(jié)果暫時(shí)放到一個(gè)對(duì)象集合中. 可是這樣就以為著在迭代之前一定要計(jì)算號(hào). 要么可能你的movenext 就相當(dāng)?shù)膹?fù)雜了. .NET 編譯生成的代碼其實(shí)利用了state machine. 代碼量也很大.

類似迭代的調(diào)用,比如二叉樹(shù)遍歷 用yield return 就很方便了.另外還有常說(shuō)的pipeline模式也很方便了.

可是yield return 還是有一些缺陷.

比如如果GetFiles 有一個(gè)參數(shù)是ref 或者 out, 那這個(gè)state machine就很難去維護(hù)狀態(tài)了. 事實(shí)上,yield return那是不支持方法帶有ref或者out參數(shù)的情況.

 

在迭代器塊中用于向枚舉數(shù)對(duì)象提供值或發(fā)出迭代結(jié)束信號(hào)。它的形式為下列之一:

復(fù)制代碼
yield return <expression>;
yield break;

計(jì)算表達(dá)式并以枚舉數(shù)對(duì)象值的形式返回,;expression 必須可以隱式轉(zhuǎn)換為迭代器的 yield 類型,。

yield 語(yǔ)句只能出現(xiàn)在 iterator 塊中,,該塊可用作方法,、運(yùn)算符或訪問(wèn)器的體。這類方法,、運(yùn)算符或訪問(wèn)器的體受以下約束的控制:

  • 不允許不安全塊,。

  • 方法、運(yùn)算符或訪問(wèn)器的參數(shù)不能是 refout,。

yield 語(yǔ)句不能出現(xiàn)在匿名方法中,。有關(guān)更多信息,請(qǐng)參見(jiàn) 匿名方法(C# 編程指南),。

當(dāng)和 expression 一起使用時(shí),,yield return 語(yǔ)句不能出現(xiàn)在 catch 塊中或含有一個(gè)或多個(gè) catch 子句的 try 塊中。有關(guān)更多信息,,請(qǐng)參見(jiàn) 異常處理語(yǔ)句(C# 參考),。

在下面的示例中,迭代器塊(這里是方法 Power(int number, int power))中使用了 yield 語(yǔ)句,。當(dāng)調(diào)用 Power 方法時(shí),,它返回一個(gè)包含數(shù)字冪的可枚舉對(duì)象。注意 Power 方法的返回類型是 IEnumerable(一種迭代器接口類型),。

 

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;

namespace yieldList
{
    public class List
    {
        //using System.Collections;
        public static IEnumerable Power(int number, int exponent)
        {
            int counter = 0;
            int result = 1;
            while (counter++ < exponent)
            {
                result = result * number;
                yield return result;
            }
        }

        static void Main()
        {
            // Display powers of 2 up to the exponent 8:
            foreach (int i in Power(2, 8))
            {
                Console.Write("{0} ", i);

            }
            Console.ReadKey();
        }
    }
    /*
    Output:
    2 4 8 16 32 64 128 256
    */

}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多