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

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

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

      從 Comparison/Converter 到Func 的進化

      本篇文章給大家介紹兩個在.net2.0 中就已經出現的, 很"老"的委托方式.

      通常情況下, 我們在Array 和 List<T> 類中使用這些功能. 明白用法和作用可以幫助你自如的使用它們.

      但是你也可以使用和它們作用相同的Func 家族的形式 -- 在.NET 2.0 之后引入的新功能.

      通過了解這些基本信息可以幫助我們看到一部分.net 進化的過程. 我稱這種內容為"歷史".

       

      只是拋磚引玉, 希望大家多多交流

      Comparison<T>

      它的出現是為了對Array 和 List<T> 執行type-safe 排序.

      注意, Linq函數的 OrderBy(), ThenBy() 是不支持comparison<T>委托的.

      看下面的實例:

      using System;
      using System.Collections.Generic;
      using System.Linq;


      public class Hero
      {
      public string Name { get; set; }
      public int Age { get; set; }
      public double Power { get; set; }
      }

      class Program
      {
      static void Main(string[] args)
      {
      var heroes = new List<Hero>
      {
      new Hero {Name = "Goku", Age = 60, Power = 1000.00},
      new Hero {Name = "Vegeta", Age = 65, Power = 800.00},
      new Hero {Name = "Ikki", Age = 22,Power = 345.30},
      new Hero {Name = "Dr. Slump", Age = 40, Power = 1.23},
      };

      Console.WriteLine("***** sort by age ****");
      heroes.Sort((lhs, rhs) => Comparer<int>.Default.Compare(lhs.Age, rhs.Age));
      Print(heroes);
      Console.WriteLine("***** sort by name ****");
      heroes.Sort((lhs, rhs) => string.Compare(lhs.Name, rhs.Name));
      Print(heroes);
      Console.WriteLine("***** sort by power ****");
      heroes.Sort((lhs, rhs) => Comparer<double>.Default.Compare(rhs.Power, lhs.Power));
      Print(heroes);

      Console.Read();
      }

      private static void Print(IEnumerable<Hero> heroes)
      {
      foreach (var hero in heroes)
      {
      Console.WriteLine(hero.Name + "(" + hero.Age + ")");
      }
      }
       
      很容易理解上面幾種排序的方法. 那么使用新的Func時, 實現如下:

       

      Console.WriteLine("***** sort by name(Func) ****");
      var heroesOrderByName = heroes.OrderBy(t => t.Name);
      Print(heroesOrderByName);

      在這種情況下Comparison<T> 使用較少的原因, 就是相對代碼工作量大, 實現復雜一些.

      Converter<TInput, TOutput>

      Converter的使用是對某種類型的列表或者數組進行操作, 將其轉化為另外一個類型的列表或者數組.

      繼續使用上面的代碼, 插入:

      Console.WriteLine("***** TestFunc ****");
      TestFunc(heroes);

      Console.WriteLine("***** TestConverter ****");
      TestConverter(heroes);

      Console.WriteLine("***** TestLinqSelect ****");
      TestLinqSelect(heroes);

      private static void TestFunc(List<Hero> heroes)
      {
      Func<Hero, string> selector = p => p.Name;

      IEnumerable<string> names = heroes.Select(selector);

      print(names);
      }

      private static void TestLinqSelect(List<Hero> heroes)
      {
      var names = heroes.Select(p => p.Name);

      print(names);
      }

      private static void TestConverter(List<Hero> heroes)
      {
      var names = heroes.ConvertAll(p => p.Name);

      print(names);
      }


      private static void print(IEnumerable<string> names)
      {
      foreach (string name in names)
      Console.WriteLine(name);
      }
      其實上面 TestLinqSelect 和 TestFunc 是同一碼事, 我只是給大家提供不同的代碼方案而已. 一般, 我們不會使用TestFunc 這種形式.
      注意, 用 Linq 的Select 和其他一些Linq的函數一樣, 是推遲執行, 這意味著, 很多時候, 它們將不執行轉換, 直到數值被使用.
       
      這事實上是雙刃劍, 有時候它可以獲取更好的效率, 但是如果你馬上就想要結果就會導致額外的后臺工作開銷 -- 支持延遲執行的功能本身需要使用到yield return /yield break 來維持當前狀態的信息迭代器.

      小結

      本質上來講, Comparison/Converter 和與之相對應的Func沒有太多區別, 但是為什么.net 讓它們同時存在, 或者換句話講在有了實現方案后, 為什么要"多余"引入后者?

      這是因為之后被引入的委托Func<>是一個多功能兵種, 但是在執行具體任務的時候效果稍有區別.

      在新項目中, 我們也更傾向于使用新的方法.

      參考文章:C#/.NET Little Wonders: The Predicate, Comparison, and Converter Generic Delegates

      本文來自于喜樂的ASP.NET(Alex Song) 轉貼請注明出處

      posted @ 2011-11-30 05:32  擁有的都是恩典  閱讀(1893)  評論(2)    收藏  舉報
      主站蜘蛛池模板: 天天澡日日澡狠狠欧美老妇 | 91福利一区福利二区| 成人国产精品中文字幕| 2019国产精品青青草原| 美日韩在线视频一区二区三区| 又黄又刺激又黄又舒服| 日韩在线视频观看免费网站| 国产欧美日韩精品丝袜高跟鞋| 99热精国产这里只有精品| 亚洲精品一区二区三区大桥未久| 国产午夜亚洲精品一区| 日本视频一区二区三区1| 久久96热在精品国产高清| 摸丰满大乳奶水www免费| 四虎国产精品永久在线国在线| 999精品全免费观看视频| 国产粉嫩高中无套进入| 九九热精品在线免费视频| 亚洲一区二区精品偷拍| 亚洲鸥美日韩精品久久| 自拍第一区视频在线观看| 国产不卡一区在线视频| 无码熟妇人妻av在线电影| 绥阳县| 色偷偷久久一区二区三区| 国产AV影片麻豆精品传媒| 国产一区二区三区黄网| 国产精品小粉嫩在线观看| 性色欲情网站| 蜜臀av一区二区精品字幕| 亚洲一区二区中文字幕| 国产初高中生在线视频| 亚洲欧洲一区二区三区久久 | 成人综合人人爽一区二区| 国产一区二区日韩在线| 亚洲成人av免费一区| 免费人成在线视频无码| 成人国产精品免费网站| 国产福利永久在线视频无毒不卡| b站永久免费看片大全| 国产无遮挡又黄又大又爽|