亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#中反射和擴展方法如何運用

2019-10-29 21:10:52
字體:
來源:轉載
供稿:網友

前段時間做了一個練手的小項目,名叫Book_Bar,用來賣書的,采用的是三層架構,也就是Models,IDAL,DAL,BLL 和 Web , 在DAL層中各個類中有一個方法比較常用,那就是RowToClass ,顧名思義,也就是將DataTable 中的數據封裝到Models 中。結果導致在DAL各個類中寫了很多類似的方法,后來就直接把它抽取出來做成了DataTable和DataRow的擴展方法,下面是代碼:

using System;using System.Collections.Generic;using System.Data;using System.Reflection;namespace DAL{ /// <summary> /// 用于給 DataTable和 DataRow擴展方法 /// </summary> public static class TableExtensionMethod {  /// <summary>  /// 功能:  ///  給DataTable擴展了一個方法,能夠將DataTable中的行轉變為對應的class對象,并封裝到List集合中;  /// </summary>  /// <typeparam name="T">需要轉變成為的class類型</typeparam>  /// <param name="table">傳入的DataTable對象</param>  /// <returns>返回一個封裝了對應class的List集合</returns>  public static List<T> TableToClass<T>(this DataTable table)  {   Type type = typeof(T);   PropertyInfo[] propArr = type.GetProperties();//獲取所有屬性   List<T> list = new List<T>();   DataRowCollection rows = table.Rows;   int len = rows[0].ItemArray.Length;//獲取第一行的列數,即class的屬性個數   for (int i = 0; i < rows.Count; i++)   {    T t = (T)Activator.CreateInstance(type);    for (int j = 0; j < len; j++)//這里之所以不使用propArr.Length,是因為有些Models的屬性在數據表中不存在對應的列    {     propArr[j].SetValue(t, rows[i][j]);    }    list.Add(t);    t = default(T);   }   return list;  }  /// <summary>  /// 功能:  ///  DataRow的擴展方法;  ///  能夠將DataRow對象封裝到泛型對象中  /// </summary>  /// <typeparam name="T">需要轉換成為的class類型</typeparam>  /// <param name="row">被轉換的行</param>  /// <returns>封裝了行數據的class對象</returns>  public static T RowToClass<T>(this DataRow row)  {   //Type type = Assembly.Load(classFullName).GetType();   Type type = typeof(T);   T t = (T)Activator.CreateInstance(type);   PropertyInfo[] propArr = type.GetProperties();   int len = row.ItemArray.Length;   for (int i = 0; i < len; i++)   {    propArr[i].SetValue(t, row[i]);   }   return t;  }  /// <summary>  /// 功能:  ///  DataRowCollection的擴展方法;  ///  能夠將DataRowCollection對象封裝到泛型List集合中  /// </summary>  /// <typeparam name="T"></typeparam>  /// <param name="rows"></param>  /// <returns></returns>  public static List<T> RowToClass<T>(this DataRow row, DataRow[] rowArr)  {   Type type = typeof(T);   PropertyInfo[] propArr = type.GetProperties();   int len = rowArr[0].ItemArray.Length;//獲取數據表第一行的列數,即屬性個數   List<T> list = new List<T>();   for (int i = 0; i < rowArr.Length; i++)   {    T t = (T)Activator.CreateInstance(type);    for (int j = 0; j < len; j++)    {     propArr[j].SetValue(t, rowArr[i][j]);    }    list.Add(t);    t = default(T);   }   return list;  } }}

上面用到了泛型,反射,擴展方法。

之前在使用這行代碼時出了點小問題:

propArr[i].SetValue(t, row[i]);

報了一個類型轉換異常,斷點調試之后發現是因為 Models 中的屬性的排列和數據表的列的順序不一樣導致的,參照數據表中字段的順序修改過來就好,還有一點就是在循環對屬性進行賦值時,我選用的是數據表中列的個數,而不是屬性的個數,(也就是代碼中這里之所以不使用propArr.Length,是因為有些Models的屬性在數據表中不存在對應的列
)。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成年人在线播放| 亚洲欧美综合另类中字| 57pao成人永久免费视频| 最近中文字幕mv在线一区二区三区四区| 欧美成人午夜激情在线| 青青草精品毛片| 欧美激情按摩在线| 久久天天躁狠狠躁夜夜av| 国产精品激情av电影在线观看| 欧美成人精品在线| 色综合久久中文字幕综合网小说| 浅井舞香一区二区| 精品精品国产国产自在线| 国产精品对白刺激| 亚洲精品v欧美精品v日韩精品| 国产精品人成电影在线观看| 亚洲人午夜精品免费| 国产精品91一区| 国产视频久久久久久久| 波霸ol色综合久久| 国产小视频国产精品| 久久久久久久激情视频| 亚洲韩国欧洲国产日产av| 亚洲人成网站色ww在线| 国产精品毛片a∨一区二区三区|国| 久久在线免费观看视频| 日本亚洲精品在线观看| 91理论片午午论夜理片久久| 国产日产久久高清欧美一区| 欧美激情在线观看视频| 91免费视频国产| 国产一区二区精品丝袜| 亚洲变态欧美另类捆绑| 欧美乱大交xxxxx| 欧美精品videossex性护士| 日韩国产高清视频在线| 欧美在线欧美在线| 欧美成人精品三级在线观看| 国产精品999999| 欧美日韩激情网| 日韩激情片免费| 国产精品久久久久不卡| 一区二区在线免费视频| 国产日韩欧美中文| 亚洲a区在线视频| 国产一区二区三区精品久久久| 精品视频一区在线视频| 亚洲香蕉在线观看| 青青久久av北条麻妃海外网| 国内精品免费午夜毛片| 欧美成人午夜视频| 日韩av最新在线观看| 中文字幕欧美在线| 日本精品久久久久久久| 国产一区二区三区视频免费| 国产欧美亚洲视频| 国产中文欧美精品| 亚洲自拍欧美色图| 伊人久久久久久久久久| 精品国产乱码久久久久久婷婷| 精品亚洲一区二区三区在线播放| 俺去啦;欧美日韩| 国产精品专区一| 久久久久久久久久婷婷| 久久国产精品影视| 日韩av电影院| 国产精品一区二区3区| 永久免费毛片在线播放不卡| 国产精品永久免费观看| 欧美高清视频一区二区| 红桃视频成人在线观看| 国产一区二区三区免费视频| 欧美另类在线播放| 日韩av电影手机在线| 免费不卡在线观看av| zzijzzij亚洲日本成熟少妇| 国内精品视频在线| 国产精品88a∨| 亚洲欧美国产va在线影院| 成人高清视频观看www| 久久精品国产电影| 国内成人精品一区| 亚洲精品日韩av| 尤物九九久久国产精品的分类| 欧美日韩国产精品一区| 精品香蕉一区二区三区| 欧美一级淫片aaaaaaa视频| 91在线观看免费观看| 日本久久中文字幕| 亚洲午夜国产成人av电影男同| 少妇高潮久久久久久潘金莲| 美女国内精品自产拍在线播放| xxxx性欧美| 国产精品久在线观看| 国产亚洲精品综合一区91| 热久久免费国产视频| 中文字幕亚洲自拍| 亚洲网在线观看| 欧美成人精品三级在线观看| 欧美专区国产专区| 亚洲国产精品视频在线观看| 九九视频这里只有精品| 久久精品成人动漫| 亚洲国产欧美久久| 国产精品一区二区三区在线播放| 欧美一级大片在线观看| 欧美国产极速在线| 日本精品视频在线播放| 亚洲视频在线免费看| 日韩免费视频在线观看| 亚洲欧美中文日韩在线| 亚洲精品中文字幕有码专区| 中文字幕一区日韩电影| 久久久免费观看| 色老头一区二区三区| 欧美日韩免费网站| 91在线免费网站| 日韩影视在线观看| 成人免费在线网址| 69久久夜色精品国产69| 亚洲黄色av女优在线观看| 亚洲天堂免费视频| 在线观看免费高清视频97| 亚洲高清福利视频| 亚洲天堂成人在线视频| 国产99久久久欧美黑人| 日韩av手机在线| 午夜精品一区二区三区在线视| 亚洲色图在线观看| 狠狠躁夜夜躁人人躁婷婷91| 欧美壮男野外gaytube| 中文字幕亚洲综合久久筱田步美| 国产国语videosex另类| 国产精品吴梦梦| 国产精品一区二区三区久久久| 久久九九有精品国产23| 97超级碰碰碰| 国产一区二区三区在线视频| 精品久久香蕉国产线看观看亚洲| 成人444kkkk在线观看| 97色在线观看| 亚洲毛片在线免费观看| 久久福利视频导航| 久久亚洲国产精品| 日韩动漫免费观看电视剧高清| 日韩中文字幕视频在线| 中文字幕日韩在线播放| 最新69国产成人精品视频免费| 亚洲成人黄色网| 九九精品在线视频| 亚洲毛片在线观看.| 日韩成人性视频| 欧美性生交xxxxxdddd| 亚洲第一综合天堂另类专| 欧美视频在线看| 26uuu另类亚洲欧美日本一| 姬川优奈aav一区二区| 久久av红桃一区二区小说| 久久久久久久激情视频| 欧美肥老妇视频| 久久久久久久久久国产| 日韩av片免费在线观看| 午夜精品一区二区三区在线| 成人美女av在线直播|