通过.NET反射动态调用SetValue方法给属性PropertyInfo赋值
通过.NET反射动态调用SetValue方法给属性PropertyInfo赋值
注意:若不动态转换属性的值,简单调用SetValue方法赋值经常出错!特别是日期类型、带符号的数字类型等。 解决方案: 通过TypeDescriptor.GetConverter方法获取对应数值类型的转换器,然后调用ConvertFromString方法进行转换。 C# Code: /// <summary> /// 通过.NET反射动态调用SetValue方法给属性PropertyInfo赋值 /// </summary> /// <param name="obj">对象实例</param> /// <param name="propertyName">属性名称</param> /// <param name="sValue">字符类型的数值</param> private void SetPropertyValue(object obj, string propertyName, string sValue) { PropertyInfo p = obj.GetType().GetProperty(propertyName, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase); if (p != null) { object dynmicValue; if (p.PropertyType.IsArray)//数组类型,单独处理 { p.SetValue(obj, sValue, null); } else { //根据属性类型动态转换属性的值 if (String.IsNullOrEmpty(sValue.ToString()))//空值 dynmicValue = p.PropertyType.IsValueType ? Activator.CreateInstance(p.PropertyType) : null;//值类型 else dynmicValue = System.ComponentModel.TypeDescriptor.GetConverter(p.PropertyType).ConvertFromString(sValue.ToString());//创建对象 //调用属性的SetValue方法赋值 p.SetValue(obj, dynmicValue, null); } } } //来源:C/S框架网(www.csframework.com) QQ:23404761
参考文档:
C# Winform动态设置控件的值及反射技术应用 C#.Net反射(Reflaction)技术实例详解 通过反射技术创建窗体实例然后给控件赋值(C#) C# 动态编译及调用WebService的方法 C#.Net 类的同名方法重载调用顺序 C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用) C#.Net开发继承UITypeEditor接口的自定义属性编辑器 C#.Net组件开发 - 设计时使用自定义属性编辑器持久化对象 标签:C#.Net组件开发 - 自定义设计器持久化对象的属性 标签:C#.Net组件开发 - 自定义属性编辑器持久化对象的属性 C/S开发框架Toolbar按钮的动态生成与调用关系 通过反射,调用DLL程序集某个类的静态方法打开窗体 C#.NET扩展的动态对象支持动态属性和方法以及Json格式与对象互转 C#.NET 定义动态对象dynamic以及属性和方法 C#.NET通过CodeDom.Compiler动态编译计算表达式的值
其它资料:
什么是C/S结构? | C/S框架核心组成部分 | C/S框架-WebService部署图 | C/S框架-权限管理 | C/S结构系统框架 - 5.1旗舰版介绍 | C/S结构系统框架 - 功能介绍 | C/S结构系统框架 - 产品列表 | C/S结构系统框架 - 应用展示(图) | 三层体系架构详解 | C/S架构轻量级快速开发框架 | C/S框架网客户案例 | WebApi快速开发框架 | C/S框架代码生成器 | 用户授权注册软件系统 | 版本自动升级软件 | 数据库底层应用框架 | CSFramework.CMS内容管理系统 | |