[深入学习C#]利用反射给对象赋值
转载自诗人江湖老,原文地址
C#中利用反射能够获取对象的属性信息,也可以利用反射给对象赋值。
我们如果想利用凡是给一个对象属性赋值可以通过PropertyInfo.SetValue()方式进行赋值,但要注意值的类型要与属性保持一致。
假设我们有如下一个结构:
struct Person
{public string code{get; set;}public string name{get; set;}
}
下面一段代码,展示了如何利用反射来给对象赋值:
Person p =new Person(){code="123456", name="Jay"};
Person item=new Person();
PropertyInfo[] props=p.GetType().GetProperties();
props.ToList().ForEach(pi=>{if (!pi.PropertyType.IsGenericType){if (pi.GetValue(p) != null){pi.SetValue(item, Convert.ChangeType(pi.GetValue(p), pi.PropertyType));}}else{Type genericTypeDefinition = pi.PropertyType.GetGenericTypeDefinition();if (genericTypeDefinition == typeof(Nullable<>)){if (pi.GetValue(p) != null){pi.SetValue(item, Convert.ChangeType(pi.GetValue(p), Nullable.GetUnderlyingType(pi.PropertyType)));}}});
pi.SetValue(item, Convert.ChangeType(pi.GetValue(p), pi.PropertyType))
pi.SetValue(item, Convert.ChangeType(pi.GetValue(p), Nullable.GetUnderlyingType(pi.PropertyType)))
这两行代码,分别是给非泛型属性赋值和给泛型属性赋值。
[深入学习C#]利用反射给对象赋值相关推荐
- java反射是运行时,Java反射(三)在运行时利用反射分析对象
在运行时利用反射分析对象,其实就是利用反射来获得或者设置类的域.举例如下: 有一个Student类: package testreflection; public class Student { pr ...
- 利用反射打印对象一般成员属性值
为什么80%的码农都做不了架构师?>>> 利用反射打印对象一般成员属性值 public static void printVoOrDtoVal(Object obj){ Str ...
- 利用反射过滤对象的null值
2019独角兽企业重金招聘Python工程师标准>>> 项目的数据库在 测试插入的时候 添加了很多空的数据进去 不是null 而是直接的varvhar格式的 字符串 "NU ...
- C# 可以利用反射给只读属性赋值吗?
结论:可以 验证demo如下: using System; using System.Collections.Generic; using System.ComponentModel; using S ...
- 利用反射实现对象调用方法
转载于:https://www.cnblogs.com/toward-the-sun/p/4023267.html
- 使用基于注解的mybatis时,利用反射和注解生成sql语句
在开发时遇到一个问题,在使用基于注解的mybatis插入一个对象到mysql时,在写sql语句时需要列出对象的所有属性,所以在插入一个拥有10个以上属性的对象时sql语句就会变得很长,写起来也很不方便 ...
- 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换
在游戏开发中,配置表是不可少的.通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来. 先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue( ...
- java判断对象无数据_java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值...
1.java利用反射机制判断对象的属性是否为空: Map validateMap = new LinkedHashMap(); validateMap.put("serial", ...
- java 反射创建对象并赋值_java使用反射创建并操作对象的方法
Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.refle ...
最新文章
- 94年出生,6篇SCI,一作发Science,你还不放下手上玩的泥巴
- Microsoft Office Backstage(第 1 部分 – 幕后故事)
- 单机和分布式场景下,有哪些流控方案?
- java主类与源代码名称_java 获取操作系统名称 附源代码
- C 实现 删除字符串空白符的函数 strtrim
- php session 保存数组,php - 我用ajax设置的SESSION数组变量没有被保存?
- pandas学习笔记二之pandas选择器
- vue入门:(class与style绑定)
- @transactional可以用在controller层吗_石晶地板可以用在浴室吗?
- VS2012写的程序在VS2010打开时显示当前版本不兼容
- 庞皓计量经济学第四版_庞皓《计量经济学》(第4版)全套资料【教材+笔记+题库】...
- 01 LeNet-5论文笔记-Gradient-Based Learning Applied to Document Recognition
- BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草
- 计算机帐务处理子系统只能在一级,2009年初级会计电算化考前冲刺精选题二
- Python 简单的人名对话
- NCBI BLAST工具本地化
- FHQ_TREAP学习笔记
- FTP协议(文件传输协议)
- uniapp微信小程序瀑布流布局
- Permutation test(排列(组合)检验)