<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C# 中奇妙的函數 -- 4. Empty, DefaultIfEmpty, Count

      謝謝大家之前的關注和熱情的回復,本文將繼續探討在System.Linq 下的一些容易被人忽視卻可能對你有大幫助的函數。

      Empty 靜態方法

      有多少次你不得不從一個方法返回一個空集合(無論是由于錯誤的條件,或者沒有項目存在),并創建了一個空數組或列表?

      讓我們看一個簡單的POCO 類,它包含了兩個銀行帳戶轉帳的信息:

         public class Transfer
         {
              public string FromAccount { get; set; }
              public string ToAccount { get; set; }
              public double Amount { get; set; }
         }
       

      現在,比方說我們有一個數據訪問對象Data access object,它是用于收集一些特別的轉帳并且返回他們。 但是,如果當轉帳服務正在維護中,我們就返回一個空序列。

      我們當然可以返回 空值 NULL ,但返回空序列一般比空值NULL好。 因此,我們這樣做:

      public class TransferDao

      {

          public IEnumerable<Transfer> GetPendingTransfers()

          {

              if (!_txfrService.IsInMaintenanceMode())

              {

                  // 創建一個列表,并返回它...

              }

              // 否則,因為我們是在維護模式,返回一個空的集合:

              return new List<Transfer>(0);

          }

      }

      這里的問題是,我們基本上是浪費了內存分配。 如果我們打算做的是返回給定類型的只讀空序列,我們可以使用LINQ的空序列來代表它 -- 盡量不要浪費內存分配:

      public class TransferDao

      {

          public IEnumerable<Transfer> GetPendingTransfers()

          {

              if (!_txfrService.IsInMaintenanceMode())

              {

                  // 創建一個列表,并返回它...

              }

              // 否則,因為我們是在維護模式,返回一個空的集合:

              return Enumerable.Empty<Transfer>();

          }

      }

      請注意,這次我們調用 了  Enumerable 的 Empty<T>() 這個靜態方法,Enumerable 擴展定義了接口 IEnumerable的 方法,Empty 其實只是一個簡單的靜態方法,它返回類型為 T 的空序列。

      DefaultIfEmpty 擴展方法

      我們已經會用Empty生成空序列。 但問題是,如果你想返回一個序列當序列是空的時候包含一個默認的項目怎么辦?

      比如說,如果你正在分析測試成績列表,如果學生沒有得分,要返回一個 0:

      var scores = new[] { 73, 77, 89, 90, 92, 77 };

      foreach (var score in scores.DefaultIfEmpty())

      {

          Console.WriteLine("The score is: " + score);

      }

       

      List<int> emptyScores = new List<int>();

      foreach (var score in emptyScores.DefaultIfEmpty())
      {
          Console.WriteLine("The score is: " + score);

      }

      現在,還有第二種形式的DefaultIfEmpty(),可讓您指定要使用的默認值,而不是依賴于 Default(T) 。 例如,如果我們希望得到平均分,但如果是空值就要返回一個100.

        var averageSoFar = scores.DefaultIfEmpty(100).Average();

      Count() 擴展方法

      這個方法的作用看起來是顯而易見的,對不對? 在大多數情況下是的。它也有一些不錯的功能,值得一提。

      首先,調用 不帶參數的 Count() 返回序列計數。 這可能看起來對于List<T>有點像多余的:

      var scoreArray = new[] { 73, 77, 89, 90, 92, 77 };

      var scoreList = new List<int> { 73, 77, 89, 90, 92, 77 };

      Console.WriteLine(scoreArray.Length);

      Console.WriteLine(scoreArray.Count());

      Console.WriteLine(scoreList.Count);

      Console.WriteLine(scoreList.Count());

      單單的一個 count() , 不是很令人興奮啊。 那么, 看看它的重載 predicate ( Func<T, bool> ),讓你數算符合條件的所有項目:

      var scoreList = new List<int> { 73, 77, 89, 90, 92, 77 };
      var numberOfBsOrBetter = scoreList.Count(s => s >= 80);

      
      

      //為什么要用這個呢?既然我們有那個方便的重載

      var numberOfBsOrBetter = scoreList.Where(s => s >= 80).Count();

      Count() VS Any()

      該 Count() 擴展方法用于檢查項目的數量,但如果你想知道的是一個序列是不是空,可能更有效的是使用Any() 擴展方法。

          / /這個遍歷所有項目,即使第一項已經合乎要求了 
      var hasAnyBsOrBetter = scoreList.Count(s => s >= 80) != 0;
       
         / /它將在第一項比較之后就停止,而不進一步檢查
      var hasAnyBsOrBetter2 = scoreList.Any(s => s >= 80);
       

      請注意, Any(), 就像 COUNT()一樣,也有不帶參數的形式:

      var isEmpty = someSequence.Count() == 0;
      var isEmpty2 = !someSequence.Any();
       

      如果序列是類似一個數組列表,可能沒有關系,因為他們需要一個固定的時間 -- 為O(1) -- 來計數,但對于其他序列,使用Any()更有效的檢查是否非空。

      本文參考翻譯自 C#/.NET Little Wonders: Empty(), DefaultIfEmpty(), and Count()

      轉載請注明原出處: 喜樂的ASP.NET(Alex Song)

      更多相關文章: http://www.rzrgm.cn/multiplesoftware/category/283530.html

      posted @ 2011-06-04 05:12  擁有的都是恩典  閱讀(12224)  評論(5)    收藏  舉報
      主站蜘蛛池模板: 连江县| 永久免费无码成人网站| 99精品久久毛片a片| 天堂av资源在线免费| 国产成人亚洲日韩欧美| 女人扒开的小泬高潮喷小| 成人一区二区不卡国产| 成人av专区精品无码国产| 人妻蜜臀久久av不卡| 少妇扒开双腿自慰出白浆| 久久www免费人成看片中文| 亚洲精品一二三在线观看| 国产在线乱子伦一区二区| 这里只有精品在线播放| 久久精品色妇熟妇丰满人| 老鸭窝| 国产 麻豆 日韩 欧美 久久| 内射中出无码护士在线| 午夜男女爽爽影院免费视频下载| 日韩中文字幕精品人妻| 天干天干夜啦天干天干国产| 日韩人妻系列无码专区| 久久精品免视看国产成人| 国产精品白浆免费视频| 人妻系列中文字幕精品| 性欧美VIDEOFREE高清大喷水| 午夜AAAAA级岛国福利在线| 波多野结系列18部无码观看AV| 辰溪县| 亚洲欧美日韩综合久久| 免费看久久妇女高潮a| 日韩av中文字幕有码| 日韩精品毛片一区到三区| 国产精品久久久久久久9999| 亚洲国产性夜夜综合| 粉嫩av蜜臀一区二区三区| 97se亚洲综合自在线| 国产午夜一区二区在线观看| 国产高在线精品亚洲三区| japanese无码中文字幕| 制服丝袜人妻有码无码中文字幕 |