转载自诗人江湖老,原文地址
 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#]利用反射给对象赋值相关推荐

  1. java反射是运行时,Java反射(三)在运行时利用反射分析对象

    在运行时利用反射分析对象,其实就是利用反射来获得或者设置类的域.举例如下: 有一个Student类: package testreflection; public class Student { pr ...

  2. 利用反射打印对象一般成员属性值

    为什么80%的码农都做不了架构师?>>>    利用反射打印对象一般成员属性值 public static void printVoOrDtoVal(Object obj){ Str ...

  3. 利用反射过滤对象的null值

    2019独角兽企业重金招聘Python工程师标准>>> 项目的数据库在 测试插入的时候 添加了很多空的数据进去 不是null 而是直接的varvhar格式的 字符串 "NU ...

  4. C# 可以利用反射给只读属性赋值吗?

    结论:可以 验证demo如下: using System; using System.Collections.Generic; using System.ComponentModel; using S ...

  5. 利用反射实现对象调用方法

    转载于:https://www.cnblogs.com/toward-the-sun/p/4023267.html

  6. 使用基于注解的mybatis时,利用反射和注解生成sql语句

    在开发时遇到一个问题,在使用基于注解的mybatis插入一个对象到mysql时,在写sql语句时需要列出对象的所有属性,所以在插入一个拥有10个以上属性的对象时sql语句就会变得很长,写起来也很不方便 ...

  7. 类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换

    在游戏开发中,配置表是不可少的.通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来. 先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue( ...

  8. java判断对象无数据_java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值...

    1.java利用反射机制判断对象的属性是否为空: Map validateMap = new LinkedHashMap(); validateMap.put("serial", ...

  9. java 反射创建对象并赋值_java使用反射创建并操作对象的方法

    Class 对象可以获得该类里的方法(由 Method 对象表示).构造器(由 Constructor 对象表示).成员变量(由 Field 对象表示),这三个类都位于 java.lang.refle ...

最新文章

  1. 94年出生,6篇SCI,一作发Science,你还不放下手上玩的泥巴
  2. Microsoft Office Backstage(第 1 部分 – 幕后故事)
  3. 单机和分布式场景下,有哪些流控方案?
  4. java主类与源代码名称_java 获取操作系统名称 附源代码
  5. C 实现 删除字符串空白符的函数 strtrim
  6. php session 保存数组,php - 我用ajax设置的SESSION数组变量没有被保存?
  7. pandas学习笔记二之pandas选择器
  8. vue入门:(class与style绑定)
  9. @transactional可以用在controller层吗_石晶地板可以用在浴室吗?
  10. VS2012写的程序在VS2010打开时显示当前版本不兼容
  11. 庞皓计量经济学第四版_庞皓《计量经济学》(第4版)全套资料【教材+笔记+题库】...
  12. 01 LeNet-5论文笔记-Gradient-Based Learning Applied to Document Recognition
  13. BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草
  14. 计算机帐务处理子系统只能在一级,2009年初级会计电算化考前冲刺精选题二
  15. Python 简单的人名对话
  16. NCBI BLAST工具本地化
  17. FHQ_TREAP学习笔记
  18. FTP协议(文件传输协议)
  19. uniapp微信小程序瀑布流布局
  20. Permutation test(排列(组合)检验)

热门文章

  1. 使用 nvm 安装 nodejs 和 npm
  2. 移动游戏加载性能和内存管理全解析 学习
  3. 使用python 对图片进行水印,保护自己写的文章
  4. [Linux]变量加减赋值以及将String转int
  5. 一个障碍,就是一个超越自我的契机
  6. Python正则表达式指南上半部
  7. ppp和chap的区别
  8. Exposing Windows Forms Controls as ActiveX controls
  9. markdown文件转word文件
  10. Mysql8.0Mysql5.7Mysql5.6Mysql5.5特性对比