相关背景:

在项目开发中,我们经常会自定义一些实体类,在某些需要动态赋值的功能中,我们无法知道到下一个需要赋值的字段名称是什么,只知道会从其他返回需要赋值的字段名称和值,这时候就需要实现索引器了,就像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索引器相关推荐

  1. C#利用反射将实体类ListT转化为Datatable

    背景介绍 C#中实体类的操作十分简便,一般情况下不需要涉及ADO.NET,如果需要将实体类转化为Datatable,这个时候就需要手动写一个方法了,代码如下图所示: public static cla ...

  2. java 反射获取实体类_Java 通过反射给实体类赋值操作

    表单提交这个方法是挺方便的,但在java来说就显得有些麻烦了, 怎么个麻烦呢,就是当你字段多的时候,你就得一个一个的获取其对应的值,这样代码量就多了起来,其代码量不说,维护也是一个问题. 所以就有了这 ...

  3. 利用反射技术修改类中的字段(成员变量的反射)

    题目:利用反射技术修改类中的字段及成员变量的反射 作者:Vashon 一.首先定义一个类如下: class ReflectPoint {private int x; //私有的public int y ...

  4. 利用反射动态实例化类执行方法并传值

    /// <summary>         /// 利用反射动态实例化类执行方法并传值         /// </summary>         /// <param ...

  5. C#利用反射将Datatable转化为指定实体类ListT

    背景介绍 在软件开发中肯定免不了和数据库打交道,我们对数据的增删改查最终会转化为SQL在数据库中执行.从SQLServer中查出数据一般有两种方式:一是ADO.NET直接写SQL语句从数据中查出数据, ...

  6. 利用dom4j将实体类转换为对应的xml报文

    利用dom4j生成xml报文 目标格式: <?xml version="1.0" encoding="GBK"?><Packet type=& ...

  7. java反射获取实体类_java 反射获取类对象的三种方式

    Java反射经常用到的就是获取对象中的属性,那么Java获取类对象就是必不可少的啦! Java实体类: public class ReflexModel { private String code; ...

  8. (C#)利用反射动态调用类成员[转载]

    使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember(    string name ...

  9. 利用反射动态调用类成员C#

    使用反射动态调用类成员,需要Type类的一个方法:InvokeMember.对该方法的声明如下(摘抄于MSDN): public object InvokeMember(    string name ...

最新文章

  1. java8异步_Java8新特性之:CompletableFuture
  2. hibernate教程--一级缓存
  3. nginx proxy_cache 缓存配置
  4. 后端:414 Request-URI Too Large解决方案
  5. 菜鸟教程 之 HTML DOM 和 浏览器BOM
  6. 调用css样式是不调用某个属性,CSS选择器可以引用另一个选择器属性吗?
  7. Atitit 微服务的一些理论 目录 1. 微服务的4个设计原则和19个解决方案 1 2. 微服务应用4个设计原则 1 2.1. AKF拆分原则 2 2.2. 前后端分离 2 2.3. 无状态服务
  8. UDK开发环境搭建完全流程
  9. FBI也没辙?超强加密软件TrueCrypt全教程
  10. Jensen不等式及其应用
  11. html5+css3初学练手小米商城
  12. 高中信息技术简答题汇总
  13. 日程安排工具Calendso
  14. ORA-00937:不是单组分组函数
  15. 【图片无损压缩利器】Image Optimizer
  16. 基于can总线的A2L文件解析(1)
  17. 收集的JS常用正则表达式等(转载)
  18. 立体翻转效果海报怎么制作?PS详细步骤教程!
  19. Java网页数据抓取实例
  20. iOS中调用短信、电话、邮件、Safari浏览器API

热门文章

  1. 我的女朋友漏电了–论C++中的失败(failure),缺陷(bug)和异常(exception)
  2. Sublime Text 3 配置python交互运行环境的快捷键
  3. ELK系列~对fluentd参数的理解
  4. SIEM部署失败的五大原因
  5. C和C++实务精选丛书
  6. 1.android体系结构介绍
  7. VBoxManage: error: Nonexistent host networking interface, name 'vboxnet0' (VERR_INTERNAL_ERROR)
  8. windows版一键绕id工具_Windows免费版一键绕过IOS13.6激活锁工具XgRiNdA,完美重启!...
  9. python离线录音转文字_Python将文字转成语音并读出来的实例详解
  10. js html异步加载的属性,异步加载JS的五种方式