C#是强类型语言,强到多变态?一个对象没有定义某个属性,你想点出来,IDE直接给你报语法错误。远不如js那么自由,想怎么点怎么点。

如果你从别人接口中拿到的就是Object类型,你想获取某个属性的值怎么办?

弱类型语言中,一个对象可以随便点出里面的属性,即使没有定义也只是返回给你一个undefined。强类型语言就必须使用实体(类),还好C#有个dynamic,让c#具备了弱类型语言特性

eg1:

  1. static void Main(string[] args)
  2. {
  3. object obj = new
  4. {
  5. Name = "小明",
  6. SayHi = "你妹的!"
  7. };
  8.  
  9. dynamic dyName = ((dynamic)obj).Name;
  10. dynamic dySayHi = ((dynamic)obj).SayHi;
  11.  
  12. Console.WriteLine(dyName + "\t" + dySayHi);
  13. }

你可以创建一个实体,用序列化再反序列化的方式,当然笔者不推荐,如果你就用一次的话还要为之创建一个实体,累不累啊!

下面是笔者推荐的方式,先把对象转化成Type类型,再获取它的属性,再获取属性的值

eg2:

  1. static void Main(string[] args)
  2. {
  3. object obj = new
  4. {
  5. Name = "小明",
  6. SayHi = "你妹的!"
  7. };
  8.  
  9. Console.WriteLine("Name:\t" + obj.GetType().GetProperty("Name").GetValue(obj));
  10. Console.WriteLine("SayHi:\t" + obj.GetType().GetProperty("SayHi").GetValue(obj));
  11. Console.ReadKey();
  12. }

eg3:

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. GetObjectPropertyValue();
  6. Console.ReadKey();
  7. }
  8.  
  9. private static void GetObjectPropertyValue()
  10. {
  11.  
  12. List<object> list = (List<object>)GetObj();//强制类型转化
  13. foreach (var item in list)
  14. {
  15. Console.WriteLine(item.GetType().GetProperty("Title").GetValue(item) + "\t" + item.GetType().GetProperty("Content").GetValue(item));
  16. }
  17. }
  18.  
  19. private static object GetObj()
  20. {
  21. List<object> list = new List<object>();
  22. object message = new
  23. {
  24. Title = "ceshi111",
  25. Content = "hahahah111"
  26. };
  27. object message2 = new
  28. {
  29. Title = "ceshi222",
  30. Content = "hahahah222"
  31. };
  32. list.Add(message);
  33. list.Add(message2);
  34. return list;
  35. }
  36. }

从Object对象中读取属性的值的更多相关文章

  1. C# 从Object对象中读取属性的值

    https://www.cnblogs.com/xbblogs/p/7739483.html

  2. 微信小程序:给data中对象中的属性设置值与给data中的属性或对象或数组设置值的区别

    一.给data中的属性或对象或数组设置值,属性名不需要加引号 this.setData({ material: param, // 这里material为对象 } this.setData({   d ...

  3. js为Object对象动态添加属性和值 eval c.k c[k]

    const appendInfo = () => { const API_SECRET_KEY = 'https://github.com/dyq086/wepy-mall/tree/maste ...

  4. javascript获取对象中的属性及值

    function displayProp(obj){ var names=""; for(var name in obj){ names+=name+": "+ ...

  5. JavaScript 深入了解对象中的属性

    本篇主要介绍JS中对象的属性,包括:属性的分类.访问方式.检测属性.遍历属性以及属性特性等内容. 目录 1. 介绍:描述属性的命名方式.查找路径以及分类 2. 属性的访问方式:介绍'.'访问方式.'[ ...

  6. C#比较两个对象中的指定字段值是否相等

    一.创建CompareFieldAttribute标识要比较的字段 using System; namespace CompareObjField { /// <summary> /// ...

  7. 枚举对象中的属性 for . . in

    枚举对象中的属性:把对象中所有的属性和值都取出来 使用 for . . . in 语句 语法: for(var  变量  in  对象){ } for  . . . in 语句  对象中有几个属性,循 ...

  8. C#验证对象中的属性是否为空的共通方法

    在后台接口处理时,经常需要对请求的参数做验证.因此提取了共通方法,方便进行判断. /// <summary> /// 数据验证工具类 /// </summary> public ...

  9. C#利用反射实现两个类的对象之间相同属性的值的复制

    http://blog.csdn.net/u013093547/article/details/53584591 今天在拷贝对象的时候,看着代码实在是有点烦,一堆一样的代码,还是找找有没有直接反射拷贝 ...

随机推荐

  1. In file included from adlist.c:34:0: zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

    问题: In file included from adlist.c:34:0:zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录 解决: make ...

  2. The Beam Model:Stream & Tables翻译(上)

    作者:周思华 欢迎访问网易云社区,了解更多网易技术产品运营经验. 本文尝试描述Beam模型和Stream & Table理论间的关系(前者描述于数据流模型论文.the-world-beyond ...

  3. Day 30 面向对象的考试题

    -摘自张磊同学博客. 面向对象 1.请简述类.对象.实例化.实例这些名词的含义: #类 : 是对具有相同属性和相似行为的一类事物的抽象 #对象: 是一个具有具体属性值的类的实例化 #实例化 : 从一个 ...

  4. Day 4 list 列表的使用方法

     https://www.cnblogs.com/fanison/p/7123532.html s="abcdefg"print("s[3]:",s[3])pr ...

  5. 雨天的尾巴(bzoj3307)(线段树合并+树上差分)

    \(N\)个点,形成一个树状结构.有\(M\)次发放,每次选择两个点\(x,y\) 对于\(x\)到\(y\)的路径上(含\(x,y\))每个点发一袋\(Z\)类型的物品.完成 所有发放后,每个点存放 ...

  6. 微信小程序与vueJs的异同

    简而言之,所有的框架都是建立在原生javascript基础之上的,所以对于有一定js基础的同学来说,各种框架都是比较容易入手的,但不同的框架之间又有一定的差别,有时候切换使用时就会掉入坑了. 一.微信 ...

  7. 如何使不同时区的时间与京8区一致?(JS实现)

    如何使不同时区的时间与京8区一致?(JS实现) Update:2019/1/28 更简单的是使用这个函数(toDate): // 自定义日期格式如下(年月日都必须提供): // "2011- ...

  8. POJ 2245

    //此题一看便是简单的回溯题用DFS+回溯便可以做出来了. #include <iostream> #define MAXN 20 using namespace std; int _m[ ...

  9. 线程安全单例最佳实践,C#中的Lazy是如何保证线程安全的

    在.NET 4.0之后,.NET Framework中提供了一种安全的延迟加载类型LazyLazy能够在多线程环境下,保证GetValue函数只执行一次,从而实现单例模式 在过去,实现单例模式我们通常 ...

  10. php 按照二位数组中某个指定的字段进行排序

    /** * 按照二维数组中某个指定的某个字段进行排序 * @param $array 需要被排序的数组 * @param $flag 排序的标志 1,SORT_DESC 降序 2,SORT_ASC 升 ...