• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Javen-Studio 咖啡小屋

            http://javenstudio.org - C++ Java 分布式 搜索引擎
            Naven's Research Laboratory - Thinking of Life, Imagination of Future

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              24 隨筆 :: 57 文章 :: 170 評(píng)論 :: 4 Trackbacks

            3.3         延遲的查詢賦值(Deferred Query Evaluation

            機(jī)敏的讀者(Observant readers)可能注意到標(biāo)準(zhǔn)的 Where 操作符在 C# 2.0 介紹里是用 yield 構(gòu)造(construct)實(shí)現(xiàn)的。這是所有的標(biāo)準(zhǔn)操作符返回(return)有序列的數(shù)據(jù)(sequences of values)所采用的共同的實(shí)現(xiàn)技術(shù)。yield 關(guān)鍵詞的用途有個(gè)很有趣的好處,就是查詢實(shí)際是直到迭代結(jié)束(iterated over)后才被賦值的,即使是 foreach 語(yǔ)句或者手工使用下面(underlying)的 GetEnumerator MoveNext 方法也是如此。這種延遲的賦值方式允許查詢像基于 IEnumerable<T> 值(IEnumerable<T>-based values)一樣保留著,在每次 yield 方式返回可能不同的結(jié)果(yielding potentially different results)的時(shí)候可以被賦值多次(evaluated multiple times)。

             

            對(duì)許多應(yīng)用程序來(lái)說(shuō),這是期望(desired)得到的準(zhǔn)確的行為(is exactly the behavior)。對(duì)應(yīng)用程序想緩存查詢賦值的結(jié)果,ToList ToArray 這兩個(gè)操作符提供用來(lái)強(qiáng)制查詢的直接賦值(force the immediate evaluation),以返回一個(gè)含有查詢賦值的結(jié)果的 List<T> 或者Array 數(shù)組。

             

            為了解延遲查詢賦值是怎么工作的,請(qǐng)考察下面一段簡(jiǎn)單地查詢一個(gè)數(shù)組的程序:

             

            // declare a variable containing some strings
            string[] names = "Allen""Arthur""Bennett" };

            // declare a variable that represents a query
            IEnumerable<string> ayes = names.Where(s => s[0== 'A');

            // evaluate the query
            foreach (string item in ayes) 
              Console.WriteLine(item);

            // modify the original information source
            names[0= "Bob";

            // evaluate the query again, this time no "Allen"
            foreach (string item in ayes) 
                Console.WriteLine(item);

             

            查詢?cè)诿看巫兞?/SPAN> ayes 迭代結(jié)束(iterated over)時(shí)賦值。為了顯示需要對(duì)結(jié)果做一份緩存的copy,我們可以簡(jiǎn)單給這個(gè)查詢附加上一個(gè) ToList 一個(gè) ToArray 操作符,如下所示:

             

            // declare a variable containing some strings
            string[] names = "Allen""Arthur""Bennett" };

            // declare a variable that represents the result
            // of an immediate query evaluation
            string[] ayes = names.Where(s => s[0== 'A').ToArray();

            // iterate over the cached query results
            foreach (string item in ayes) 
                Console.WriteLine(item);

            // modifying the original source has no effect on ayes
            names[0= "Bob";

            // iterate over result again, which still contains "Allen"
            foreach (string item in ayes)
                Console.WriteLine(item);

             

            ToList ToArray 都強(qiáng)制查詢的賦值,就像執(zhí)行一個(gè)標(biāo)準(zhǔn)查詢操作符(如 First, ElementAt, Sum, Average, All, 等)返回一個(gè)單獨(dú)的值(singleton values)一樣。

             


            待續(xù), 錯(cuò)誤難免,請(qǐng)批評(píng)指正,譯者Naven 2005-10-22

            posted on 2005-10-23 00:08 Javen-Studio 閱讀(744) 評(píng)論(1)  編輯 收藏 引用

            評(píng)論

            # re: 延遲的查詢賦值(Deferred Query Evaluation) 2005-10-23 18:57 Ninputer
            看來(lái)我不僅是機(jī)敏的讀者,而且還試圖用真協(xié)同機(jī)制來(lái)實(shí)現(xiàn)和迭代完全同步的查詢。只是還有一點(diǎn)點(diǎn)小問(wèn)題。。。  回復(fù)  更多評(píng)論
              

            久久久一本精品99久久精品88| 国产成人精品久久免费动漫| 中文精品久久久久人妻| 欧美日韩久久中文字幕| 久久精品国产影库免费看| 久久99精品国产麻豆婷婷| 色天使久久综合网天天| 人妻久久久一区二区三区| 精品久久久久久无码中文野结衣| 久久久亚洲欧洲日产国码是AV| 伊人久久大香线焦综合四虎| 成人综合久久精品色婷婷| 9999国产精品欧美久久久久久| 2021国内久久精品| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 久久久久亚洲av成人无码电影| 亚洲伊人久久精品影院| 欧美久久久久久精选9999| 国产精品久久永久免费| 亚洲国产精品无码久久一区二区| 久久精品亚洲福利| 97精品伊人久久久大香线蕉| 狠狠88综合久久久久综合网| 日韩精品久久久久久久电影蜜臀| 狠狠色丁香久久婷婷综合_中 | 亚洲欧美精品一区久久中文字幕| 久久免费线看线看| 久久精品国产亚洲麻豆| 久久久久久无码Av成人影院| 久久香蕉超碰97国产精品| 亚洲av伊人久久综合密臀性色| 狠狠色丁香久久婷婷综合_中| 国产精品久久新婚兰兰| 欧美久久久久久| 国产A三级久久精品| 久久综合狠狠综合久久综合88| 亚洲精品乱码久久久久66| 久久国产色AV免费观看| 狠狠干狠狠久久| 久久亚洲天堂| 午夜精品久久久久久久|