项目框架中有一个很实用的方法,它用来获取客户端post的数据,并自动赋值到对象各属性,这样后台少写了很多代码。但是对于有主表、子表的表单,框架中没有提供自动给子表对象各属性赋值的方法,每次都要写很多代码,各种判断,各种循环,一个属性一个属性地赋值,很不方便,所以我就尝试写了一个自动赋值的方法,用到了C#反射的知识,当然,还不够完善,方法代码如下:

public List<T> GetList<T>(MvcContext ctx, string label) where T : new()
{
List<T> tList = new List<T>();
int count = ; // 获取数据条数
PropertyInfo[] pInfoList = (typeof(T)).GetProperties();
foreach (PropertyInfo pInfo in pInfoList)
{
string values = ctx.Post(label + "." + pInfo.Name);
if (!strUtil.IsNullOrEmpty(values))
{
count = values.Split(',').Length;
break;
}
} // 给每条数据赋值
for (int i = ; i < count; i++)
{
T t = new T(); PropertyInfo[] propertyInfoList = (typeof(T)).GetProperties();
foreach (PropertyInfo propertyInfo in propertyInfoList) // 遍历实体的属性,以给实体的属性赋值
{
string values = ctx.Post(label + "." + propertyInfo.Name);
if (!strUtil.IsNullOrEmpty(values))
{
string[] valueArray = values.Split(',');

if(!strUtil.IsNullOrEmpty(valueArray[i]))
{
#region 判断实体的属性的类型并赋值
if (propertyInfo.PropertyType == typeof(int))
{
int val = int.Parse(valueArray[i]);
propertyInfo.SetValue(t, val, null);
} if (propertyInfo.PropertyType == typeof(decimal))
{
decimal val = decimal.Parse(valueArray[i]);
propertyInfo.SetValue(t, val, null);
} if (propertyInfo.PropertyType == typeof(string))
{
string val = valueArray[i];
propertyInfo.SetValue(t, val, null);
} if (propertyInfo.PropertyType == typeof(DateTime))
{
DateTime val = DateTime.Parse(valueArray[i]);
propertyInfo.SetValue(t, val, null);
}
#endregion
}
}
} tList.Add(t);
} return tList;
}

方法的使用如下:

List<IMP_PurchasePayRealDtl> purchasePayRealDtlList = GetList<IMP_PurchasePayRealDtl>(ctx, "purchasePayRealDtl");

C#反射的应用的更多相关文章

  1. 隐私泄露杀手锏 —— Flash 权限反射

    [简版:http://weibo.com/p/1001603881940380956046] 前言 一直以为该风险早已被重视,但最近无意中发现,仍有不少网站存在该缺陷,其中不乏一些常用的邮箱.社交网站 ...

  2. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  3. 关于 CSS 反射倒影的研究思考

    原文地址:https://css-tricks.com/state-css-reflections 译者:nzbin 友情提示:由于演示 demo 的兼容性,推荐火狐浏览.该文章篇幅较长,内容庞杂,有 ...

  4. 编写高质量代码:改善Java程序的151个建议(第7章:泛型和反射___建议106~109)

    建议106:动态代理可以使代理模式更加灵活 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发.我们知道一个静态代理是通过主题角色(Prox ...

  5. 运用Mono.Cecil 反射读取.NET程序集元数据

    CLR自带的反射机智和API可以很轻松的读取.NET程序集信息,但是不能对程序集进行修改.CLR提供的是只读的API,但是开源项目Mono.Cecil不仅仅可以读取.NET程序集的元数据,还可以进行修 ...

  6. .NET面试题系列[6] - 反射

    反射 - 定义,实例与优化 在面试中,通常会考察反射的定义(操作元数据),可以用反射做什么(获得程序集及其各个部件),反射有什么使用场景(ORM,序列化,反序列化,值类型比较等).如果答得好,还可能会 ...

  7. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  8. C++的性能C#的产能?! - .Net Native 系列五:.Net Native与反射

    此系列系小九的学堂原创翻译,翻译自微软官方开发向导,一共分为六个主题.本文是第五个主题:.Net Native与反射. 向导文链接:<C++的性能C#的产能?! - .Net Native 系列 ...

  9. [源码]Literacy 快速反射读写对象属性,字段

    Literacy 说明 Literacy使用IL指令生成方法委托,性能方面,在调用次数达到一定量的时候比反射高很多 当然,用IL指令生成一个方法也是有时间消耗的,所以在只使用一次或少数几次的情况,不但 ...

  10. SI与EMI(一) - 反射是怎样影响EMI

    Mark为期两天的EMC培训中大概分成四个时间差不多的部分,简单来说分别是SI.PI.回流.屏蔽.而在信号完整性的书籍中,也会把信号完整性分为:1.信号自身传输的问题(反射,损耗):2.信号与信号之间 ...

随机推荐

  1. [LeetCode] Longest Increasing Subsequence

    Longest Increasing Subsequence Given an unsorted array of integers, find the length of longest incre ...

  2. ECshop设置301最快捷最简单的方法

    ECshop设置301最快捷最简单的方法 在 init.php中加入以下代码 if (strtolower($_SERVER['SERVER_NAME'])!='www.fz1688.com') { ...

  3. Window bat expdp 定时任务逻辑备份 定时删除N天前的旧文件

    点击进入:Linux shell crontab expdp 定时任务逻辑备份 定时删除旧文件 首先建一个备份数据库用批处理文件,内容如下: rem expdp sz set sz_file=SZ_% ...

  4. [GraphQL] Use GraphQLNonNull for Required Fields

    While certain fields in a GraphQL Schema can be optional, there are some fields or arguments that ar ...

  5. iis,w3wp一直出现WerFault.exe应用程序错误

    这个进程是Windows错误报告技术里的一个东西,来收集软件崩溃或者挂起后的数据然后向微软反馈报告.关闭系统的错误报告功能后看看 1:打开 运行 (热键:win+R)输入 gpedit.msc 打开  ...

  6. 使用WebApi时Post和Put的区别

    简单的说Post是添加,Put是修改 吃不准的话,尝试用相同参数访问二次接口,结果不同的是Post(会产生多条记录),结果相同的是Put(仅为一条记录),例如:写博客就是Post:更新签名就是Put

  7. [Tip] 如何在BeyondCompare中忽略不重要的区别.

    在使用BeyondCompare时,有时需要忽略一些不重要的区别,下面的链接教你如何通过定义语法元素来实现这个功能. http://www.scootersoftware.com/support.ph ...

  8. Git 执行 「fork 出来的仓库」和「最新版本的原仓库」内容同步更新

    当我们在 GitHub 上 fork 出一个仓库后,如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢?我们一般关注的是仓库的 master(主干分支)的内容,通过以下步骤 ...

  9. SQLServer创建维护计划失败 错误c001f011

    重新注册dts.dll文件,在运行里输入命令:(x64)regsvr32 "C:\Program Files\Microsoft SQL Server\100\DTS\Binn\dts.dl ...

  10. EFW框架源代码版本升级记录说明

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...