一、在没有dynamic之前,我们想要获取返回object对象里的属性的值时,使用反射的方法来获取该对象的属性值。

class Program
{static void Main(string[] args){object obj = GetObj("张三", 21);var objName = obj.GetType().GetProperty("Name").GetValue(obj);Console.WriteLine(objName);}static object GetObj(string name, int age){return new { Name = name, Age = age };}
}

二、使用dynamic后,就可以直接【对象实例.属性名称】获取对象的属性值了。

class Program
{static void Main(string[] args){dynamic obj = GetObj("张三", 21);var objName = obj.Name;Console.WriteLine(objName);}static object GetObj(string name, int age){return new { Name = name, Age = age };}
}

三、当返回object对象的方法与调用的位置不在同一项目时(也就是当GetObj()方法在一个类库项目,而我在控制台中调用该方法),如:

  我新建一个【DynamicClassLibrary】的类库项目,新建一个DynamicClass类,给它定义一个GetObj方法,而我在ConsoleApplication1控制台项目的Main方法中调用

  

namespace DynamicClassLibrary
{public class DynamicClass{public object GetDyObj(string name, int age){// 还需要在当前程序集DynamicClassLibrary的AssemblyInfo.cs中加上[assembly: InternalsVisibleTo("使用该方法的程序集名称")]return new {Name = name, Age = age};}}
}

class Program
{static void Main(string[] args){dynamic obj = new DynamicClassLibrary.DynamicClass().GetDyObj("张三", 21);var objName = obj.Name;var objAge = obj.Age;Console.WriteLine(objName + ":" + objAge);}
}

这时候会报出这样的错误:【“object”未包含“Name”的定义】,原因可以看看:http://www.cnblogs.com/feiyun0112/p/4002291.html

解决办法有两种:

1、方法一:在DynamicClassLibrary项目的AssemblyInfo.cs中加上[assembly: InternalsVisibleTo("使用该方法的程序集名称")],这样就可以正常运行了。

2、方法二:使用dynamic自带的ExpandoObject类创建dynamic对象实例,这样就不用去修改DynamicClassLibrary项目的AssemblyInfo了,只需将GetObj方法改一下即可。

namespace DynamicClassLibrary
{public class DynamicClass{public object GetDyObj(string name, int age){// 还需要在当前程序集DynamicClassLibrary的AssemblyInfo.cs中加上[assembly: InternalsVisibleTo("使用该方法的程序集名称")]//return new {Name = name, Age = age};
dynamic dyObj = new System.Dynamic.ExpandoObject();dyObj.Name = name;dyObj.Age = age;return dyObj;}}
}

转载于:https://www.cnblogs.com/lusunqing/p/4081792.html

dynamic的使用相关推荐

  1. ideal如何创建dynamic web project

    步骤如下 ① file -> new -> project ② 选择 Java Enterprise -> next ③ create project from template - ...

  2. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  3. 需要反射时使用dynamic

    //使用dynamic的写法 dynamic fileExplorerData = _currentFolder.FileExplorerData; var data = fileExplorerDa ...

  4. Towards Real-time Semantic RGB-D SLAM in Dynamic Environments(动态语义SLAM)

    动态环境下的实时语义SLAM 简介 摘要 系统流程 实验结果 总结 简介 在ICRA 2021上看到这样一篇论文:Towards Real-time Semantic RGB-D SLAM in Dy ...

  5. ADPRL - 近似动态规划和强化学习 - Note 7 - Approximate Dynamic Programming

    Note 7 - 近似动态规划 Approximate Dynamic Programming 7. 近似动态规划 (Approximate Dynamic Programming) 7.1 近似架构 ...

  6. ADPRL - 近似动态规划和强化学习 - Note 5 - Banach Fixed Point Theorem in Dynamic Programming

    动态规划中的巴拿赫不动点定理 5. Banach Fixed Point Theorem in Dynamic Programming 5.1 巴拿赫不动点定理定理 (Banach fixed poi ...

  7. 强化学习(二)- 动态规划(Dynamic Programming)

    3.动态规划 3.1 介绍 术语动态规划(DP:Dynamic Programming) 指的是一个算法集合,可以用来计算最优策略,给定一个完美的环境模型,作为马尔可夫决策过程(MDP).经典的DP算 ...

  8. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  9. 了解 C# “.NET研究”4 中的 Dynamic 关键字

    dynamic 关键字和动态语言运行时 (DLR) 是 C# 4 和 Microsoft .NET Framework 4 中的重大新增功能. 这些功能在宣布时就引起了人们的极大兴趣,并伴随着许多疑问 ...

  10. 【引用】在Eclipse中将java Project转换成Dynamic Web Project

    编辑工程的.project文件: 添加 <nature>org.eclipse.wst.common.project.facet.core.nature</nature> &l ...

最新文章

  1. bean覆盖 springboot_Springboot配置加载覆盖值顺序
  2. [uoj24]缩紧优化
  3. 群晖docker安装cms_Nas码农篇:群晖Docker安装Gitlab
  4. 返回路径平面上的间隙_返回电流及其与通孔的关系
  5. SpringBoot 学习二:操作数据库
  6. c语言 中断 局部变量 not allocated,C语言(函数)调用过程(略译)
  7. Python之lambda表达式
  8. 搜索复习-基础水题(一共12道)
  9. 数据库级别的MD5加密(建议收藏)
  10. 基于haclon的曲线针识别实例
  11. 20160507-hibernate入门
  12. 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”
  13. 福昕阅读器的 注册码
  14. c语言扩展编译器,TKStudio内置51编译器SDCC对C语言的扩展(2)
  15. java虚拟机运行机制
  16. SAP中公司间过账问题处理实例
  17. nginx另类复杂的架构
  18. 移动光猫改桥接,开启telnet
  19. project和program的区别
  20. 985毕业,半路出家28岁进军Java,坚持了三年现如今年薪36W+,也不算辜负自己了

热门文章

  1. 机器学习算法中的F值(F-Measure)、准确率(Precision)、召回率(Recall)
  2. GBDT原理及利用GBDT构造新的特征-Python实现
  3. 农业知识图谱(KG):农业领域的信息检索,命名实体识别,关系抽取,分类树构建,数据挖掘...
  4. Android自定义浮框,Android实现全局悬浮框
  5. pdf增强锐化软件_终于找到这款神器!高级锐化插件 让你的画面更清晰
  6. 被踢出sci_这本世界上创刊最早的期刊竟被踢出 SCI 了?!
  7. panda提取时间戳中的日期_Pandas处理时间序列数据的20个关键知识点
  8. android没有实现glFlush或glFinish
  9. 别信了大佬的“鬼话”,想造无人驾驶到底进展如何吗?
  10. 微信小程序 --- 动态获取input的value