直接贴代码了:

    class Student{public int StuId { get; set; }public string StuName { get; set; }}class Program{static void Main(string[] args){var person = new { Id = 18, Name = "bruce", DateOfBirth = new DateTime(1985,8,8), RandomNum = Guid.NewGuid() };TestGetPropertyValue(person);TestSetPropertyValue(new Student { StuId = 1, StuName = "Jacky" });}static void TestGetPropertyValue(object obj){Console.WriteLine("以下是从一个对象中获取的信息:\n");int id = obj.GetPropertyValue<int>("Id", 6);Console.WriteLine("获取成功,Id: " + id);int id2 = obj.GetPropertyValue<int>("Id2", 7);Console.WriteLine("获取失败,返回默认的 Id2: " + id2);string name = obj.GetPropertyValue<string>("Name", "default Name");Console.WriteLine("获取成功,Name: " + name);DateTime dateOfBirth = obj.GetPropertyValue<DateTime>("DateOfBirth", new DateTime(2000,1,1));Console.WriteLine("获取成功,DateOfBirth: " + dateOfBirth);Guid randomNum = obj.GetPropertyValue<Guid>("RandomNum", Guid.Empty);Console.WriteLine("获取成功,RandomNum: " + randomNum);Console.WriteLine("\n获取完毕!\n\n");}static void TestSetPropertyValue(object obj){string stuName = obj.GetPropertyValue<string>("StuName", "default StuName");Console.WriteLine("获取成功,StuName: " + stuName);obj.SetPropertyValue("StuName", "bruce liu");stuName = obj.GetPropertyValue<string>("StuName", "default bruce liu .");Console.WriteLine("动态设置后,StuName: " + stuName);Console.WriteLine("\n设置完毕!\n\n");}}public static class ObjectExtensions{/// <summary>/// 利用反射,动态获取一个 Property 的值(一般用于获得匿名类型的实例的值)/// </summary>/// <typeparam name="T">期望返回的类型</typeparam>/// <param name="obj">要获得的对象</param>/// <param name="propertyName">属性名称</param>/// <param name="defaultValue">默认值</param>/// <returns>是否成功,如果成功,则返回等效的值,否则返回默认值</returns>public static bool GetPropertyValue<T>(this object obj, string propertyName, out T returnValue){Type type = obj.GetType();PropertyInfo property = type.GetProperty(propertyName);if (property == null){returnValue = default(T);return false;}object value = property.GetValue(obj, null);if( value is T ){returnValue = (T)value;return true;}else{returnValue = default(T);return false;}}/// <summary>/// 利用反射,动态获取一个 Property 的值(一般用于获得匿名类型的实例的值)/// </summary>/// <typeparam name="T">期望返回的类型</typeparam>/// <param name="obj">要获得的对象</param>/// <param name="propertyName">属性名称</param>/// <param name="defaultValue">默认值</param>/// <returns>是否成功,如果成功,则返回等效的值,否则返回默认值</returns>public static T GetPropertyValue<T>(this object obj, string propertyName, T defaultValue){T returnValue;return GetPropertyValue<T>(obj, propertyName, out returnValue) ? returnValue : defaultValue;}/// <summary>/// 利用反射,动态设置一个 Property 的值(一般用于设置具有 public setter 类型的实例的值)/// </summary>/// <param name="obj">要设置的对象</param>/// <param name="propertyName">属性名称</param>/// <param name="value">要设置的值</param>public static void SetPropertyValue(this object obj, string propertyName, object value){Type type = obj.GetType();PropertyInfo property = type.GetProperty(propertyName);if (property != null){property.SetValue(obj, value, null);}}}

运行截图:

也许你还会喜欢:代码练习在 C# 中得到一个 object (包含匿名对象)的属性和属性值

谢谢浏览!

转载于:https://www.cnblogs.com/Music/archive/2012/08/04/dynamic-get-or-set-property-value-in-c-sharp.html

C# 中 动态获得或设置一个对象的值相关推荐

  1. dcs系统服务器配置,DCS系统中动态数据服务器设置方法

    DCS和PLC都是现代自动化发展过程中应用的较为广泛两大系统,本文是对DCS系统中的动态数据库的设置方法说明. DCS控制系统属于基础自动化,MIS系统侧重于办公自动化.这两者在反映速度上的区别很大, ...

  2. Smartforms 表格中动态文本字体设置问题

    如下图所示,表格中有一个动态文本: 修改后客户反馈文本位置一直居中: 通过查询发现没有设置文本的显示格式,最终通过排查发现,原来实在smartforms的style中设置: 在表头数据中设置的样式才会 ...

  3. antd 中的 table 组件设置 size 属性值为 small 后,表头背景色设置的解决方案

    antd中的 table 组件的效果图: 默认size属性值是default : 当设置size="small" ; 表头的背景色没有了: 解决方案:在表格列里面设置 classN ...

  4. HTML中style/css/color设置颜色值(RGB值)的几种方法(常见颜色和色值)

    一般成体系的前端开发,会有UED给出具体的值,也会统一一个表达方式,所以开发不用关心值的问题. 但日常仍然会遇到很多表达方式的不同,尤其是十进制和十六进制转换太麻烦,所以特别记录下不同的表达方式. 颜 ...

  5. masked_fill【将mask中值为True的位置对应的待填充的张量设置为value值】

    masked_fill方法有两个参数,maske和value,mask是一个pytorch张量(Tensor),元素是布尔值,value是要填充的值,填充规则是mask中取值为True位置对应于待填充 ...

  6. 代码中动态设置view或布局的宽高

    有时我们需要在应用中动态改变图片或某一块布局的大小.这就不能用XML文件写成固定值,而需要在java代码中动态设置.效果如下: 网上有一些教程使用relativeView.setLayoutParam ...

  7. 微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法

    微信小程序首页index.js获取不到app.js中动态设置的globalData的原因以及解决方法 参考文章: (1)微信小程序首页index.js获取不到app.js中动态设置的globalDat ...

  8. Quartz在Spring中动态设置cronExpression

    什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...

  9. Quartz在Spring中动态设置cronExpression (spring设置动态定时任务)

    2019独角兽企业重金招聘Python工程师标准>>> 什么是动态定时任务:是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定). 这样总不能修改 ...

  10. vue修改meta值_vue中动态设置meta标签和title标签的方法

    vue中动态设置meta标签和title标签的方法 因为和原生的交互是需要h5这边来提供meta标签的来是来判断要不要显示分享按钮,所有就需要手动设置meta标签,标题和内容 //router内的设置 ...

最新文章

  1. 让你用 Chrome 上网快到想哭:Vimium
  2. 如何利用pycharm实现本地代码和远程的实时同步
  3. 【EASYDOM系列教程】之创建页面元素
  4. 我眼中的 NCC,WTM 寻亲之旅
  5. poj 1161 最短路构图
  6. cuda安装和卸载(ubuntu)
  7. 游戏 发烧型计算机配置清单,这才是发烧级硬件玩家的电脑配置清单
  8. VS2008SP1下jQuery使用初体验
  9. 【Oracle】数据库范式
  10. cholesky分解_Time Series Analysis-1.2 LDL分解
  11. 【WebGIS bug】WARNING: Too many active WebGL contexts. Oldest context will be lost.
  12. Android app升级完成以后自动重启自身App
  13. opencv 读取双摄自动对齐参数intrinsics.yml、extrinsics.yml 2021-04-12
  14. 计算机没有游戏客户端程序咋办,电脑开始菜单游戏不见了怎么办
  15. ORB-SLAM2(2) ROS下配置和编译
  16. CTF---Web入门第七题 猫抓老鼠
  17. TSC打印机使用教程终极版
  18. 单片机进阶---HLK-W801硬件开发之制作PCB
  19. java实现word导出(带图片)
  20. 冒泡算法详解(AVA)

热门文章

  1. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_17-CMS前端工程创建-单页面应用介绍...
  2. linux查看文件的编码格式的方法 set fileencoding PYTHON
  3. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_14maven工程servlet实例之指定web文件夹...
  4. python进阶之内置方法
  5. 汇编实验 三 编程、编译、连接、跟踪
  6. 万能五笔输入法@相反
  7. SQL2043N 与 linux的randomize_va_space特性
  8. IOS VFL语言(页面布局)
  9. memcache简单操作
  10. 随着浏览器窗口缩小表格出现横向滚动条