dynamic的使用
一、在没有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的使用相关推荐
- ideal如何创建dynamic web project
步骤如下 ① file -> new -> project ② 选择 Java Enterprise -> next ③ create project from template - ...
- 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 ...
- 需要反射时使用dynamic
//使用dynamic的写法 dynamic fileExplorerData = _currentFolder.FileExplorerData; var data = fileExplorerDa ...
- Towards Real-time Semantic RGB-D SLAM in Dynamic Environments(动态语义SLAM)
动态环境下的实时语义SLAM 简介 摘要 系统流程 实验结果 总结 简介 在ICRA 2021上看到这样一篇论文:Towards Real-time Semantic RGB-D SLAM in Dy ...
- ADPRL - 近似动态规划和强化学习 - Note 7 - Approximate Dynamic Programming
Note 7 - 近似动态规划 Approximate Dynamic Programming 7. 近似动态规划 (Approximate Dynamic Programming) 7.1 近似架构 ...
- ADPRL - 近似动态规划和强化学习 - Note 5 - Banach Fixed Point Theorem in Dynamic Programming
动态规划中的巴拿赫不动点定理 5. Banach Fixed Point Theorem in Dynamic Programming 5.1 巴拿赫不动点定理定理 (Banach fixed poi ...
- 强化学习(二)- 动态规划(Dynamic Programming)
3.动态规划 3.1 介绍 术语动态规划(DP:Dynamic Programming) 指的是一个算法集合,可以用来计算最优策略,给定一个完美的环境模型,作为马尔可夫决策过程(MDP).经典的DP算 ...
- Simple Dynamic Strings(SDS)源码解析和使用说明二
在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...
- 了解 C# “.NET研究”4 中的 Dynamic 关键字
dynamic 关键字和动态语言运行时 (DLR) 是 C# 4 和 Microsoft .NET Framework 4 中的重大新增功能. 这些功能在宣布时就引起了人们的极大兴趣,并伴随着许多疑问 ...
- 【引用】在Eclipse中将java Project转换成Dynamic Web Project
编辑工程的.project文件: 添加 <nature>org.eclipse.wst.common.project.facet.core.nature</nature> &l ...
最新文章
- bean覆盖 springboot_Springboot配置加载覆盖值顺序
- [uoj24]缩紧优化
- 群晖docker安装cms_Nas码农篇:群晖Docker安装Gitlab
- 返回路径平面上的间隙_返回电流及其与通孔的关系
- SpringBoot 学习二:操作数据库
- c语言 中断 局部变量 not allocated,C语言(函数)调用过程(略译)
- Python之lambda表达式
- 搜索复习-基础水题(一共12道)
- 数据库级别的MD5加密(建议收藏)
- 基于haclon的曲线针识别实例
- 20160507-hibernate入门
- 安装SQL Server 2012过程中出现“启用windows功能NetFx3时出错”
- 福昕阅读器的 注册码
- c语言扩展编译器,TKStudio内置51编译器SDCC对C语言的扩展(2)
- java虚拟机运行机制
- SAP中公司间过账问题处理实例
- nginx另类复杂的架构
- 移动光猫改桥接,开启telnet
- project和program的区别
- 985毕业,半路出家28岁进军Java,坚持了三年现如今年薪36W+,也不算辜负自己了
热门文章
- 机器学习算法中的F值(F-Measure)、准确率(Precision)、召回率(Recall)
- GBDT原理及利用GBDT构造新的特征-Python实现
- 农业知识图谱(KG):农业领域的信息检索,命名实体识别,关系抽取,分类树构建,数据挖掘...
- Android自定义浮框,Android实现全局悬浮框
- pdf增强锐化软件_终于找到这款神器!高级锐化插件 让你的画面更清晰
- 被踢出sci_这本世界上创刊最早的期刊竟被踢出 SCI 了?!
- panda提取时间戳中的日期_Pandas处理时间序列数据的20个关键知识点
- android没有实现glFlush或glFinish
- 别信了大佬的“鬼话”,想造无人驾驶到底进展如何吗?
- 微信小程序 --- 动态获取input的value