实体类

  1. class Product
  2. {
  3. public string Id { get; set; }
  4. public string Name { get; set; }
  5. public List<ProductDetail> Detail { get; set; }
  6. public List<ProductComment> Comment { get; set; }
  7. }
  8. class ProductDetail
  9. {
  10. public string DtlId { get; set; }
  11. public string Id { get; set; }
  12. public decimal Number { get; set; }
  13. public decimal Price { get; set; }
  14. public decimal Amount { get; set; }
  15. }
  16. class ProductComment
  17. {
  18. public string DtlId { get; set; }
  19. public string Id { get; set; }
  20. public string Comment { get; set; }
  21. }

反射获取属性值等,中间加了小数位数保留的操作(黄色部分)

  1. static void FromatDitits<T>(T model)
  2. {
  3. var newType = model.GetType();
  4. foreach (var item in newType.GetRuntimeProperties())
  5. {
  6. var type = item.PropertyType.Name;
  7. var IsGenericType = item.PropertyType.IsGenericType;
  8. var list = item.PropertyType.GetInterface("IEnumerable", false);
  9. Console.WriteLine($"属性名称:{item.Name},类型:{type},值:{item.GetValue(model)}");
  10. if (IsGenericType && list != null)
  11. {
  12. var listVal = item.GetValue(model) as IEnumerable<object>;
  13. if (listVal == null) continue;
  14. foreach (var aa in listVal)
  15. {
  16. var dtype = aa.GetType();
  17. foreach (var bb in dtype.GetProperties())
  18. {
  19. var dtlName = bb.Name.ToLower();
  20. var dtlType = bb.PropertyType.Name;
  21. var oldValue = bb.GetValue(aa);
  22. if (dtlType == typeof(decimal).Name)
  23. {
  24. int dit = ;
  25. if (dtlName.Contains("price") || dtlName.Contains("amount"))
  26. dit = ;
  27. bb.SetValue(aa, Math.Round(Convert.ToDecimal(oldValue), dit, MidpointRounding.AwayFromZero));
  28. }
  29. Console.WriteLine($"子级属性名称:{dtlName},类型:{dtlType},值:{oldValue}");
  30. }
  31. }
  32. }
  33. }
  34. }

测试方法:

  1. var model = new Product
  2. {
  3. Id = "",
  4. Name = "Test1",
  5. Detail = new List<ProductDetail>
  6. {
  7. new ProductDetail{Id="" ,DtlId="",Number=12.3568M,Price=5.689M,Amount=70.2978352M},
  8. new ProductDetail{Id="",DtlId="",Number=12.35M,Price=5.689M,Amount=70.2978352M},
  9. new ProductDetail{Id="",DtlId="",Number=12.358M,Price=5.689M,Amount=70.304662M},
  10. }
  11. };
  12. FromatDitits<Product>(model);
  13. Console.WriteLine("----------------------------");
  14. foreach (var item in model.Detail)
  15. {
  16. Console.WriteLine($"Number值为:{item.Number},Price值为:{item.Price},Amount值为:{item.Amount}");
  17. }
  18.  
  19. Console.ReadKey();

结果显示:

C# 反射获取属性值、名称、类型以及集合的属性值、类型名称的更多相关文章

  1. java中使用反射获取pojo(实体)类的全部字段值

    说起反射.不得不说它实在是太强大了,通过反射就能够轻轻松松拿到各种东东,假设你想在项目中解除对某个类的依赖,能够考虑用反射. 今天跟大家分享的是通过java中的反射,获取pojo类的全部字段值. 为什 ...

  2. java中使用反射获取pojo(实体)类的所有字段值

    出处:https://developer.aliyun.com/article/239346 说起反射,不得不说它实在是太强大了,通过反射就可以轻轻松松拿到各种东东,如果你想在项目中解除对某个类的依赖 ...

  3. org.reflections 接口通过反射获取实现类源码研究

    org.reflections 接口通过反射获取实现类源码研究 版本 org.reflections reflections 0.9.12 Reflections通过扫描classpath,索引元数据 ...

  4. 面试题----入参两个Integer,无返回值,然后使这个两个值在调用函数后交换

    我最近看到过一个比较好玩的面试题. 写个方法,入参两个Integer,无返回值,然后使这个两个值在调用函数后交换 很有意思的一个题目,引发我的深思,根据一路的学习过来,下面把实现代码贴出来,方便学习. ...

  5. 6-12 varchar和char 枚举类型enum 集合set

    1       字符类型char和varchar #官网:https://dev.mysql.com/doc/refman/5.7/en/char.html #注意:char和varchar括号内的参 ...

  6. C# 反射获取属性类型及属性值,两个实体转换

    一.两个实体数据转换 /// <summary> /// 为属性赋值 /// </summary> /// <typeparam name="T"&g ...

  7. c# 如何通过反射 获取\设置属性值

    c# 如何通过反射 获取\设置属性值 //定义类public class MyClass{public int Property1 { get; set; }}static void Main(){M ...

  8. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  9. 反射获取属性DisplayName特性名字以及属性值

    /// <summary> /// 反射获取所有DisplayName标记值 /// </summary> /// <typeparam name="T&quo ...

随机推荐

  1. mybatis一级缓存

    在select  处添加useCache=false flushCache=true, mybatis默认开启一级缓存

  2. PyCharm导入tensorflow包

    若是你也遇到这个问题,说明你也没有理解tensorflow到底在哪里. 当安装了anaconda3.6后,在PyCharm中设置interpreter,这个解释器决定了你在PyCharm环境中写的代码 ...

  3. Junit单元测试随笔

    Junit单元测试随笔 Mooctest 使用心得: Mooctest IDE非常适合新手使用,相比于Eclipse,他免去了配置环境的麻烦.eclipse中 Junit 编写代码经验总结 刚开始写测 ...

  4. #Windows# 删除桌面删除不了文件夹

    问题:某个文件夹直接删除提示找不到. 解决方法:进入命令行,使用rmdir命令,删除成功. 具体命令为: cd /d D:\Desktop //使用/d可以改变驱动器,不用这个参数只能在同一个驱动器里 ...

  5. Vue.js 父子组件之间通信的方式

    Vue 父子组件之间的同学有一下几种方式: 1. props 2. $emit -- 组件封装用的比较多 3. .sync -- 语法糖 4. $attrs 和 $listeners -- 组件封装用 ...

  6. defer、return、返回值,这三者的执行逻辑

    defer.return.返回值,这三者的执行逻辑是: return 最先执行,return 负责将结果写入返回值中:接着defer执行,可能修改返回值:最后函数携带当前返回值退出.

  7. WPF 开源项目

    Modern UI for WPF :http://mui.codeplex.com/ 利用Wpf实现Win8 Modern样式的开源项目wpf toolkit :http://wpftoolkit. ...

  8. 常用java的正则表达式

    package everyDayPratise; import java.util.regex.Pattern; public class RegexExample { public static v ...

  9. 在已安装64位oracle的服务器安装32位客户端

    应用场景:服务器操作系统是win2012 64位,原先安装了64位oracle12,后来系统增加导入excel的功能,网站必须启用32位兼容模式,这时候发现原有的页面打不开,提示: 试图加载格式不正确 ...

  10. 去freessl.org申请免费ssl服务器证书

    去freessl.org申请免费ssl服务器证书 来源: 本文链接 来自osnosn的博客 写于: 2019-03-30. 想搞个自签名证书,可以参考这篇: 用openssl为WEB服务器生成证书(自 ...