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

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

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

      開(kāi)源一個(gè)小類(lèi)庫(kù), 用于對(duì)象間靈活的拷貝屬性,還有IDataReader到實(shí)體類(lèi)的轉(zhuǎn)換

      功能一:

      背景:

        編程中經(jīng)常有這個(gè)需求,要在兩個(gè)非常類(lèi)似的實(shí)體類(lèi)中,拷貝同名屬性的值,(例如在WCF實(shí)體和EF實(shí)體中的拷貝...)

        以往一般有兩個(gè)方案

          1.硬編碼:執(zhí)行效率很高,不過(guò)要寫(xiě)很多重復(fù)的代碼,

          2.反射: 靈活,不過(guò)效率非常低

       

      這里提供一個(gè)靈活性不比反射差的解決方案  https://github.com/xwj90/Clover.Copyer

      使用代碼非常簡(jiǎn)單,如下所示, 只有一句話(huà)

       //范例一  在兩個(gè)對(duì)象直接拷貝屬性
      ClassA target = new ClassA();
      ClassB source = new ClassB() { A = "AA", B = 2, C = DateTime.Now };

      //復(fù)制代碼
      CopyHelper<ClassB, ClassA>.Copy(source, target);//這一句是調(diào)用方法

      Console.WriteLine(target.A);
      Console.WriteLine(target.B);
      Console.WriteLine(target.C);



      兩個(gè)類(lèi)型的定義如下:

          public sealed class ClassA
      {

      public string A { get; set; }
      public int B { get; set; }
      public string Title { get; set; }
      public int Id { get; set; }
      public DateTime C { get; set; }

      }
      public sealed class ClassB
      {
      public string A { get; set; }
      public int B { get; set; }
      public DateTime C { get; set; }
      }

      備注:支持所有類(lèi)型的公開(kāi)實(shí)例屬性

        不支持索引器

       

       

      功能二:

        從數(shù)據(jù)庫(kù)提供的IDataReader中讀取出對(duì)應(yīng)的值,并轉(zhuǎn)換成相應(yīng)類(lèi)型賦值給實(shí)體類(lèi),

        省掉了中間的Dataset的過(guò)程,也節(jié)省了很多類(lèi)型轉(zhuǎn)換和硬編碼的工作

        先看看代碼:

                  //范例二  從IDataReader中讀取屬性
      string connString = "Data Source=.;Initial Catalog=Northwind;Persist Security Info=True;";
      for (int i = 0; i < 1; i++)
      {

      using (SqlConnection conn = new SqlConnection(connString))
      {
      SqlCommand command = new SqlCommand();
      command.Connection = conn;
      command.CommandText = "select top 1000 * from cLog";
      conn.Open();
      IDataReader reader = command.ExecuteReader();
      var list = CopyHelper<TestClassA>.Copy(reader);//這一句是調(diào)用方法
      foreach (var item in list)
      {
      Console.Write(item.LogId + "---");
      Console.Write(item.LogTime + "---");
      Console.Write(item.AppName + "---");
      Console.Write(item.Server + "---");
      Console.Write(item.IPAddress + " ");
      Console.WriteLine();
      }
      }
      }

      備注:支持所有基本類(lèi)型,每次返回的列的順序要一樣,  不要一會(huì)兒select a,b from table  然后一會(huì)兒 select b,a from table (自動(dòng)探測(cè)要消耗很多性能,以后再實(shí)現(xiàn))

       

      實(shí)現(xiàn)原理:
      第一次的時(shí)候使用反射分析類(lèi)型, 然后使用ILEmit 生成動(dòng)態(tài)方法

      將動(dòng)態(tài)方法緩存下來(lái),第二次的時(shí)候就可以直接使用該方法了

       

      性能:

      基本上在屬性比較多的類(lèi)型中效率比例大約為  

      硬編碼:動(dòng)態(tài)方法:反射

      1:5-10:100-1000  (實(shí)際測(cè)試的時(shí)候類(lèi)中大約有 1-30個(gè)屬性)

       

       

       還請(qǐng)各位提點(diǎn)意見(jiàn)

      posted on 2012-03-10 13:24  聽(tīng)說(shuō)讀寫(xiě)  閱讀(2844)  評(píng)論(5)    收藏  舉報(bào)

      導(dǎo)航

      主站蜘蛛池模板: A毛片终身免费观看网站| 国产一级r片内射免费视频| 免费视频一区二区三区亚洲激情| av日韩精品在线播放| 少妇熟女高潮流白浆| 无码伊人66久久大杳蕉网站谷歌| 狼色精品人妻在线视频| 漂亮的保姆hd完整版免费韩国| 国产精品视频全国免费观看| 日韩欧美人妻一区二区三区| 久久国产自偷自偷免费一区| 精品国产中文字幕av| 蜜臀av久久国产午夜| 国产精品成人中文字幕| 国产精品国产三级国快看| 欧洲精品码一区二区三区| 精品无码黑人又粗又大又长| 好吊视频在线一区二区三区| 思茅市| 亚洲综合网一区中文字幕| 亚洲人成小说网站色在线| 不卡一区二区国产在线| 国产精品不卡区一区二| 最新偷拍一区二区三区| 亚洲精品一区二区三区大桥未久| 四虎影视永久无码精品| 亚洲啪啪精品一区二区的| 无遮高潮国产免费观看| 少妇人妻精品无码专区视频 | 人妻中文字幕不卡精品| 在线高清理伦片a| 国产熟女老阿姨毛片看爽爽| 国产精品毛片av999999| 日韩不卡在线观看视频不卡| 夜夜躁狠狠躁日日躁| 久久综合偷拍视频五月天| 国产AV巨作丝袜秘书| 国产a级三级三级三级| 精品婷婷色一区二区三区| 美女裸体黄网站18禁止免费下载| 97人妻人人揉人人躁人人|