这东西是.NET Framework 4.5 的新东西..
发现这个,大概就跟发现新大陆一样的兴奋,让我再次赞叹Anders Hejlsberg 之神..
 
这边有MSDN : http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx
 
简单看一下他方便的地方..
 
我自己建立一个对象:

1.public class Product
2.{
3.public string Name { getset; }
4.}

这时候如果我在'执行期' 的时候,需要加入一个dynamic 的属性..
叫做Description 怎么办呢?!

01./// <summary>
02./// 转成可以扩充的对象
03./// </summary> www.it165.net
04./// <param name="obj"></param>
05./// <returns></returns>
06.public dynamic ConvertToDynamic(object obj)
07.{
08.IDictionary<stringobject> result = new ExpandoObject();
09. 
10.foreach (PropertyDescriptor pro in TypeDescriptor.GetProperties(obj.GetType()))
11.{
12.result.Add(pro.Name, pro.GetValue(obj));
13.}
14. 
15.return result as ExpandoObject;
16.}

我写一只method 会将原本的Product 对象,转成Key Value 型态后转成ExpandoObject
之后就可以在'执行期' 加入新属性..

01.Product p1 = new Product();
02.p1.Name = "商品名称";
03. 
04. 
05.dynamic exProd = ConvertToDynamic(p1);
06.//下面两个属性都是 在执行期可被扩充出来的
07.exProd.Description = "叙述";
08.exProd.NewProperty1 = "我是新属性";
09. 
10.Response.Write(exProd.Name + "," + exProd.Description + "," + exProd.NewProperty1);

结果:

这真的在扩充上面,是非常好用的东西…

C#超级方便的ExpandoObject类别的更多相关文章

  1. Day02 - Ruby比一比:Module模块与Class类别

    前情提要 在第一天里,我很激昂地用Ruby的类别.物件.方法,写了宣言! class TingIsIronman def initialize @message =“I'm going to writ ...

  2. Day03 - Ruby比一比:Module的include与extend

    前情提要在第一天里,我们很激昂地用Ruby的类别.物件.方法,写了开赛宣言!在第二天里,我们比较了方法与模块,比的过程中,发现模块多了包含(inclusion)与延伸(extension). 超级比一 ...

  3. iOS及Mac开源项目和学习资料【超级全面】

    UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...

  4. C语言超级经典400道题目

    C语言超级经典400道题目 1.C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符.C.1 2.C语言程序的三种基本结构是____构A.顺序结构,选择结构,循环结 B.递 ...

  5. [转]超级强大的SVG SMIL animation动画详解

    超级强大的SVG SMIL animation动画详解 本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordp ...

  6. 超级表格:要山寨Excel,还是与之Say Byebye?

    创业产品难免被人拿来与现有的知名产品比较,创业者也喜欢把自己的产品与现有的知名产品比较. 我,超级表格创始人,对此有话说. 当我要在各种场合描述超级表格是什么时,也纠结过. 向用户描述时,说超级表格类 ...

  7. Mysql(超级详细)

    Mysql(超级详细) (黑小子-余) 一.Mysql介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理 ...

  8. 儿童节,和 AI 一起通关 “超级马里奥兄弟”

    摘要:六一儿童节,快来训练一款自己的游戏 AI,用代码让马里奥从大反派酷霸王的魔掌里救回桃花公主. 本文分享自华为云社区<儿童节,和 AI 一起通关 "超级马里奥兄弟"> ...

  9. 120项改进:开源超级爬虫Hawk 2.0 重磅发布!

    沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...

随机推荐

  1. 把一个project相关的jar放到project的lib文件夹中

    例如你有一个project名为xxx,/xxx 文件夹中有src.bin.等等,然后你手工创建一个lib文件夹,这样你就把解压出来的第三方lib(jar包,含javadoc)都放到lib文件夹中,这样 ...

  2. Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof)

    http://darksleep.com/player/JavaAndUnsignedTypes.html —————————————————————————————————————————————— ...

  3. Visual Studio 2012/2010/2008 远程调试

    第一步:将你本地的账号密码设置成跟服务器一样,因为远程调试也是需要用户凭证的. 第二步:将vs工具里的Remote Debugger文件夹拷贝到目标机器.大致的目录应该是:D:\Program Fil ...

  4. 【BZOJ】3412: [Usaco2009 Dec]Music Notes乐谱(二分)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3412 维护前缀和,然后直接二分即可... #include <cstdio> #incl ...

  5. 修改原型给数组对象添加forEach

    Array.prototype.forEach = function (callback, context) { for (var i = 0; i < this.length; i++) { ...

  6. 拦截asp.net输出流并进行处理的方法

    本文实例主要实现对已经生成了HTML的页面做一些输出到客户端之前的处理. 方法的实现原理是:把Response的输出重定向到自定义的容器内,也就是我们的StringBuilder对象里,在HTML所有 ...

  7. java项目学习

    GitHub地址:https://github.com/zhanglei-workspace/shopping-management-system

  8. 获取系统DPI

    public partial class Form1 : Form     { public Form1()         { InitializeComponent();              ...

  9. json字符串和json对象的转换

    http://www.json.org/提供了一个json2.js,这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法: parse用于从一个 ...

  10. jQuery Validation Engine 表单验证,自定义规则验证方法

    jQuery Validation Engine 表单验证说明文档http://code.ciaoca.com/jquery/validation-engine/ js加到jquery.validat ...