C# 反射获取属性值、名称、类型以及集合的属性值、类型名称
实体类
- class Product
- {
- public string Id { get; set; }
- public string Name { get; set; }
- public List<ProductDetail> Detail { get; set; }
- public List<ProductComment> Comment { get; set; }
- }
- class ProductDetail
- {
- public string DtlId { get; set; }
- public string Id { get; set; }
- public decimal Number { get; set; }
- public decimal Price { get; set; }
- public decimal Amount { get; set; }
- }
- class ProductComment
- {
- public string DtlId { get; set; }
- public string Id { get; set; }
- public string Comment { get; set; }
- }
反射获取属性值等,中间加了小数位数保留的操作(黄色部分)
- static void FromatDitits<T>(T model)
- {
- var newType = model.GetType();
- foreach (var item in newType.GetRuntimeProperties())
- {
- var type = item.PropertyType.Name;
- var IsGenericType = item.PropertyType.IsGenericType;
- var list = item.PropertyType.GetInterface("IEnumerable", false);
- Console.WriteLine($"属性名称:{item.Name},类型:{type},值:{item.GetValue(model)}");
- if (IsGenericType && list != null)
- {
- var listVal = item.GetValue(model) as IEnumerable<object>;
- if (listVal == null) continue;
- foreach (var aa in listVal)
- {
- var dtype = aa.GetType();
- foreach (var bb in dtype.GetProperties())
- {
- var dtlName = bb.Name.ToLower();
- var dtlType = bb.PropertyType.Name;
- var oldValue = bb.GetValue(aa);
- if (dtlType == typeof(decimal).Name)
- {
- int dit = ;
- if (dtlName.Contains("price") || dtlName.Contains("amount"))
- dit = ;
- bb.SetValue(aa, Math.Round(Convert.ToDecimal(oldValue), dit, MidpointRounding.AwayFromZero));
- }
- Console.WriteLine($"子级属性名称:{dtlName},类型:{dtlType},值:{oldValue}");
- }
- }
- }
- }
- }
测试方法:
- var model = new Product
- {
- Id = "",
- Name = "Test1",
- Detail = new List<ProductDetail>
- {
- new ProductDetail{Id="" ,DtlId="",Number=12.3568M,Price=5.689M,Amount=70.2978352M},
- new ProductDetail{Id="",DtlId="",Number=12.35M,Price=5.689M,Amount=70.2978352M},
- new ProductDetail{Id="",DtlId="",Number=12.358M,Price=5.689M,Amount=70.304662M},
- }
- };
- FromatDitits<Product>(model);
- Console.WriteLine("----------------------------");
- foreach (var item in model.Detail)
- {
- Console.WriteLine($"Number值为:{item.Number},Price值为:{item.Price},Amount值为:{item.Amount}");
- }
- Console.ReadKey();
结果显示:
C# 反射获取属性值、名称、类型以及集合的属性值、类型名称的更多相关文章
- java中使用反射获取pojo(实体)类的全部字段值
说起反射.不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射. 今天跟大家分享的是通过java中的反射,获取pojo类的全部字段值. 为什 ...
- java中使用反射获取pojo(实体)类的所有字段值
出处:https://developer.aliyun.com/article/239346 说起反射,不得不说它实在是太强大了,通过反射就可以轻轻松松拿到各种东东,如果你想在项目中解除对某个类的依赖 ...
- org.reflections 接口通过反射获取实现类源码研究
org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...
- 面试题----入参两个Integer,无返回值,然后使这个两个值在调用函数后交换
我最近看到过一个比较好玩的面试题. 写个方法,入参两个Integer,无返回值,然后使这个两个值在调用函数后交换 很有意思的一个题目,引发我的深思,根据一路的学习过来,下面把实现代码贴出来,方便学习. ...
- 6-12 varchar和char 枚举类型enum 集合set
1 字符类型char和varchar #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参 ...
- C# 反射获取属性类型及属性值,两个实体转换
一.两个实体数据转换 /// <summary> /// 为属性赋值 /// </summary> /// <typeparam name="T"&g ...
- c# 如何通过反射 获取\设置属性值
c# 如何通过反射 获取\设置属性值 //定义类public class MyClass{public int Property1 { get; set; }}static void Main(){M ...
- java利用反射获取类的属性及类型
java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...
- 反射获取属性DisplayName特性名字以及属性值
/// <summary> /// 反射获取所有DisplayName标记值 /// </summary> /// <typeparam name="T&quo ...
随机推荐
- mybatis一级缓存
在select 处添加useCache=false flushCache=true, mybatis默认开启一级缓存
- PyCharm导入tensorflow包
若是你也遇到这个问题,说明你也没有理解tensorflow到底在哪里. 当安装了anaconda3.6后,在PyCharm中设置interpreter,这个解释器决定了你在PyCharm环境中写的代码 ...
- Junit单元测试随笔
Junit单元测试随笔 Mooctest 使用心得: Mooctest IDE非常适合新手使用,相比于Eclipse,他免去了配置环境的麻烦.eclipse中 Junit 编写代码经验总结 刚开始写测 ...
- #Windows# 删除桌面删除不了文件夹
问题:某个文件夹直接删除提示找不到. 解决方法:进入命令行,使用rmdir命令,删除成功. 具体命令为: cd /d D:\Desktop //使用/d可以改变驱动器,不用这个参数只能在同一个驱动器里 ...
- Vue.js 父子组件之间通信的方式
Vue 父子组件之间的同学有一下几种方式: 1. props 2. $emit -- 组件封装用的比较多 3. .sync -- 语法糖 4. $attrs 和 $listeners -- 组件封装用 ...
- defer、return、返回值,这三者的执行逻辑
defer.return.返回值,这三者的执行逻辑是: return 最先执行,return 负责将结果写入返回值中:接着defer执行,可能修改返回值:最后函数携带当前返回值退出.
- WPF 开源项目
Modern UI for WPF :http://mui.codeplex.com/ 利用Wpf实现Win8 Modern样式的开源项目wpf toolkit :http://wpftoolkit. ...
- 常用java的正则表达式
package everyDayPratise; import java.util.regex.Pattern; public class RegexExample { public static v ...
- 在已安装64位oracle的服务器安装32位客户端
应用场景:服务器操作系统是win2012 64位,原先安装了64位oracle12,后来系统增加导入excel的功能,网站必须启用32位兼容模式,这时候发现原有的页面打不开,提示: 试图加载格式不正确 ...
- 去freessl.org申请免费ssl服务器证书
去freessl.org申请免费ssl服务器证书 来源: 本文链接 来自osnosn的博客 写于: 2019-03-30. 想搞个自签名证书,可以参考这篇: 用openssl为WEB服务器生成证书(自 ...