让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .
生活随笔
收集整理的這篇文章主要介紹了
让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
以前在開發一個系統的時候
小組里的人在寫方法的時候很累,很多方法都是對象的屬性需要大量的重復賦值,然后 添加到List對象中
?
你是否還在為一個對象里有幾十 上百個屬性 手動寫代碼賦值煩惱呢?
?
下面是一個以前的讀取數據庫 信息的例子
public IList<KFS_Model.QAS_V_MessageInfo> PagerTest(string where, KFS_Model.Pager p){SqlDataReader dr = null;string table = "QAS_V_MessageInfo";string orderby = "QuestionTime";IList<KFS_Model.QAS_V_MessageInfo> list = new List<KFS_Model.QAS_V_MessageInfo>();Pagination.page(table, where, orderby, true,p);dr = Pagination.page(table, where, orderby, false, p);while (dr.Read()){KFS_Model.QAS_V_MessageInfo qas = new KFS_Model.QAS_V_MessageInfo();qas.UserId = dr.GetGuid(1);qas.UserName = dr.GetString(2);qas.SonModelId = dr.GetGuid(3);qas.SonModelName = dr.GetString(4);qas.QuestionId = dr.GetGuid(5);qas.QuestionTitle = dr.GetString(6);qas.QuestionUrl = dr.GetString(7);qas.QuestionTime = dr.GetDateTime(8);qas.QuestionSession = dr.GetInt32(9); qas.QuestionContent = dr.GetString(10);qas.FatherModelId = dr.GetGuid(11);list.Add(qas);}return list; }?
賦值語句占了方法的一半而且寫起來還要一個一個的對照
?
很郁悶的說
?
下面就是我今天公布的源碼? 無任何版權? 歡迎轉載
?
首先構造一個泛型類
?
?
public class ClassName<T>
{
?
}
?
然后定義一個方法 方法返回集合
?
public class Class1<T>{public IList<T> GetData(SqlDataReader reader){IList<T> list = new List<T>();Type type = typeof(T);PropertyInfo[] properties = type.GetProperties();while (reader.Read()){T t = Activator.CreateInstance<T>();for (int i = 0; i < properties.Length; i++){properties[i].SetValue(t, reader[i + 1], null);}list.Add(t);}return list;}}?
?
上面給出了核心代碼 如果你要傳遞sql語句
那你的業務邏輯層 就要這一個方法也就夠了!
?
?
?
?下面一個擴展方法 由 論壇的sql1234提供 在一次感嘆 linq語法的簡潔
public static IEnumerable<T> GetObjects<T>(this DbDataReader rd) where T : new() {var fs = (from fd in typeof(T).GetFields()let desc = new { field = fd, index = rd.GetOrdinal(fd.Name) }where desc.index >= 0select desc).ToList();foreach (var x in rd){var obj = new T();fs.ForEach(d => { d.field.SetValue(obj, rd[d.index]); });yield return obj;} }?
?
這里,我們通過擴展方法,為任意DbDataReader都增加了一個GetObjects方法,返回任意指定類型的強類型的對象集合。 如果包括private的field才更完整。應該將 GetFields() 修改為GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic)
轉載于:https://www.cnblogs.com/gxy217/archive/2012/06/12/2546858.html
總結
以上是生活随笔為你收集整理的让你省写大量重复代码的方法 使用PropertyInfo类 反射获取类 的类型 .的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人命在几何
- 下一篇: 【字符串操作之】从原字符串中切出一段,返