C#利用反射实现实体类ListT索引器
生活随笔
收集整理的這篇文章主要介紹了
C#利用反射实现实体类ListT索引器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
相關背景:
? ? ? ? ? 在項目開發中,我們經常會自定義一些實體類,在某些需要動態賦值的功能中,我們無法知道到下一個需要賦值的字段名稱是什么,只知道會從其他返回需要賦值的字段名稱和值,這時候就需要實現索引器了,就像C# Datatable中的行索引器一樣,可以根據字段名稱實現查找和賦值,如下所示:
DataTable dt = new DataTable(); dt.Columns.Add("UserName", typeof(string)); DataRow dr = dt.NewRow(); dr["UserName"] = “張三”;//索引器 dt.Rows.add(dr);實體類的索引器的代碼如下圖所示:
public abstract class EntityBase{/// <summary>/// 索引器,可以用字符串訪問變量屬性/// </summary>/// <param name="_propertyName">屬性名稱</param>/// <returns>屬性值,如果傳入的屬性名稱不存在,返回null</returns>public object this[string _propertyName]{get{var pi = this.GetType().GetProperties(BindingFlags.Instance|BindingFlags.Public|BindingFlags.DeclaredOnly).FirstOrDefault(p => p.Name.Equals(_propertyName));//從所有獲取的屬性值中找到傳入的屬性值if (null != pi && null != pi.GetMethod){return pi.GetValue(this);}else{return null;}}set{var pi = this.GetType().GetProperties().FirstOrDefault(p => p.Name.Equals(_propertyName));if (null != pi && null != pi.SetMethod){if (pi.PropertyType.Equals(value.GetType())){pi.SetValue(this, value);}else{pi.SetValue(this, Convert.ChangeType(value, pi.PropertyType));}}}}}EntityBase為抽象類,無法實例化,只要實體類繼承EntityBase,便可獲得索引器功能,如下圖所示:
public class TabUser:EntityBase {public string UserName { get; set; }public string UserPwd { get; set; }public long UserID { get; set; } }TabUser User = UserLists.FirstOrDefault(); string pwd = User["UserPwd"].ToString();//實體類索引器?
總結
以上是生活随笔為你收集整理的C#利用反射实现实体类ListT索引器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java.lang.ClassNotFo
- 下一篇: JDBC中开启事务的批量插入操作