C#超级方便的ExpandoObject类别
这东西是.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 {
get
;
set
; }
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<
string
,
object
> 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类别的更多相关文章
- Day02 - Ruby比一比:Module模块与Class类别
前情提要 在第一天里,我很激昂地用Ruby的类别.物件.方法,写了宣言! class TingIsIronman def initialize @message =“I'm going to writ ...
- Day03 - Ruby比一比:Module的include与extend
前情提要在第一天里,我们很激昂地用Ruby的类别.物件.方法,写了开赛宣言!在第二天里,我们比较了方法与模块,比的过程中,发现模块多了包含(inclusion)与延伸(extension). 超级比一 ...
- iOS及Mac开源项目和学习资料【超级全面】
UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITable ...
- C语言超级经典400道题目
C语言超级经典400道题目 1.C语言程序的基本单位是____ A) 程序行 B) 语句 C) 函数 D) 字符.C.1 2.C语言程序的三种基本结构是____构A.顺序结构,选择结构,循环结 B.递 ...
- [转]超级强大的SVG SMIL animation动画详解
超级强大的SVG SMIL animation动画详解 本文花费精力惊人,具有先驱前瞻性,转载规则以及申明见文末,当心予以追究.本文地址:http://www.zhangxinxu.com/wordp ...
- 超级表格:要山寨Excel,还是与之Say Byebye?
创业产品难免被人拿来与现有的知名产品比较,创业者也喜欢把自己的产品与现有的知名产品比较. 我,超级表格创始人,对此有话说. 当我要在各种场合描述超级表格是什么时,也纠结过. 向用户描述时,说超级表格类 ...
- Mysql(超级详细)
Mysql(超级详细) (黑小子-余) 一.Mysql介绍 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理 ...
- 儿童节,和 AI 一起通关 “超级马里奥兄弟”
摘要:六一儿童节,快来训练一款自己的游戏 AI,用代码让马里奥从大反派酷霸王的魔掌里救回桃花公主. 本文分享自华为云社区<儿童节,和 AI 一起通关 "超级马里奥兄弟"> ...
- 120项改进:开源超级爬虫Hawk 2.0 重磅发布!
沙漠君在历时半年,修改无数bug,更新一票新功能后,在今天隆重推出最新改进的超级爬虫Hawk 2.0! 啥?你不知道Hawk干吗用的? 这是采集数据的挖掘机,网络猎杀的重狙!半年多以前,沙漠君写了一篇 ...
随机推荐
- JSON资料整理(转载)
目录 1.什么是json 2.json语法规则 3.json基础结构 4.json基础示例 5.JSON和XML比较 6. .NET操作JSON 原始方式 通用方式 内置方式 契约方式 通过序列化将. ...
- js计数器
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...
- iOS-回收键盘的几种方法
在开发过程中,为了实现点击屏幕其它位置收起键盘的目的,我们使用过许多的方法. 如果是在UIViewController中收起键盘,除了通过调用控件的resignFirstResponder方法外,还有 ...
- uinty实现玩家尾随鼠标位置平滑旋转角度
首先我们要在场景中加入一个quad平面作为地板, 然后指定Layer为Floor,然后移除mesh renderer组件 然后加入脚本 脚本主要思想是从屏幕中心投出一条射线到地板, 然后获取相应坐标, ...
- 安装php WampServer之后,运行的时候报错“phpMyAdmin - 错误 缺少 mysqli 扩展。请检查 PHP 配置。”
今天在安装了WampServer2.1a-x32之后,点击WampServer的图标启动WampServer,在电脑右下角就可以看到WampServer启动之后的图标,然后点击“Start All S ...
- (转载)Android 3.0动画学习笔记
转自http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html.该文章是本人见过关于Android 动画较为优秀的文章,多次查阅 ...
- C++Primer学习笔记《2》
数组是一种复合类型,由类型名+数组名+维度组成. 数组定义中的类型能够是C++基本内置类型.也能够是类类型的.数组元素的类型能够是除了引用类型以外的其它不论什么类型.没有全部的元素都是引用的数组. 数 ...
- js 播放声音文件
from:http://hi.baidu.com/xykking/item/7f64a04364e43ce4bdf45127 我在做项目的时候,也遇到了这个问题,可以灵活的使用下面的这两种方法,我使用 ...
- json中的日期格式转换(扩展new date()显示格式)
在java spring mvc 开发过程中,通过json 格式,向前端传递数据,日期格式发生了转变, 在前台数据展示时,要进行一定格式的转换才能正常显示: 我在开发中使用了easy ui 和my ...
- Crosses Puzzles zoj 4018 (zju校赛)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5746 题目大意: N*M的方格里,每个格子有一个指针,一开始指向上下左右四个方 ...