dynamic 动态获取object数据
1.替代XXX.GetType().GetProperty("YYY").GetValue(XXX)
static object GetPerson()
{
return new Person { Name = "Leo" };
}
有时候难免会遇到这种返回object的倒霉代码(特别是跟反射有关的时候),这时我们又要访问其中的某个属性,那个费劲啊,现在有了dynamic感觉好多l
object objPerson = GetPerson();
var objName = objPerson.GetType().GetProperty("Name").GetValue(objPerson);
Console.WriteLine(objName); dynamic dynPerson = GetPerson();
var dynName = dynPerson.Name;
Console.WriteLine(dynName);
另一个好处是性能会得到一程度的提升:
Watch = new Stopwatch();
Watch.Start();
for (int i = ; i < ; i++)
{
objName = objPerson.GetType().GetProperty("Name").GetValue(objPerson);
}
Watch.Stop();
Console.WriteLine(Watch.Elapsed); Watch.Restart();
for (int i = ; i < ; i++)
{
dynName = dynPerson.Name;
}
Watch.Stop();
Console.WriteLine(Watch.Elapsed);
2.拯救接手接口没设计好的代码的倒霉孩子
比如这里有N个WCF服务,返回了N个对象的集合,这几个对象没啥关系,其实又有一点关系,倒霉孩子又不会让Entity Framework生成的类自动继承某个接口(本文里用本地方法代替WCF服务)。
这里来举一个例子,首先有下面2个倒霉的类,同样string类型的name是可以提取接口的(这里真的合适提取么……),同样名称但不同类型的ID,完全无关的Age和Price。
public class Person
{
public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public static List<Person> GetPersonList()
{
return new List<Person>
{
new Person{ Name = "Leo1" , Age = },
new Person{ Name = "Leo2" , Age = },
new Person{ Name = "Leo3" , Age= }
};
}
} public class Car
{
public Guid ID { get; set; } public string Name { get; set; } public double Price { get; set; } public static List<Car> GetCarList()
{
return new List<Car>
{
new Car{ Name = "Focus1" , Price = },
new Car{ Name = "Focus2" , Price = },
new Car{ Name = "Focus3" , Price = }
};
}
}
我用2个static方法返回不同类型的List<T>来模拟WCF中最普通的调用。
static void Main(string[] args)
{
List<dynamic> list = new List<dynamic>();
//用本地方法替代WCF服务,您假装是通过WCF获取的list
Person.GetPersonList().ForEach((p) => list.Add(p));
TestDynamic2(list,"Leo2"); list = new List<dynamic>();
//用本地方法替代WCF服务,您假装是通过WCF获取的list
Car.GetCarList().ForEach((c) => list.Add(c));
TestDynamic2(list,"Focus3"); Console.ReadKey();
} private static void TestDynamic2(List<dynamic> list,string name)
{
//可以无差别的使用ID和Name属性
dynamic first = list.OrderBy(d => d.ID).FirstOrDefault(d => d.Name.Contains(name)); //差别对待不同的属性,这里供参考,不建议这么写,这会导致依赖具体的类型
if (first is Person)
{
Console.WriteLine(first.Age);
}
else
{
Console.WriteLine(first.Price);
}
}
from
http://www.cnblogs.com/manupstairs/p/3166850.html
dynamic 动态获取object数据的更多相关文章
- ECharts 环形饼图 动态获取json数据
ECharts 环形饼图 动态获取json数据 效果图如下: 一.html部分 <div id="secondPieChart" style="width:100 ...
- [Python爬虫] 之一 : Selenium+Phantomjs动态获取网站数据信息
本人刚才开始学习爬虫,从网上查询资料,写了一个利用Selenium+Phantomjs动态获取网站数据信息的例子,当然首先要安装Selenium+Phantomjs,具体的看 http://www.c ...
- echarts 柱状图和饼状图动态获取后台数据
运用echarts来实现图表 1.首先下载echarts包 http://echarts.baidu.com/echarts2/doc/example.html,在这里我下载的是 2.将echart ...
- 使用bootstrap-select控件 搜索栏键入关键字动态获取后台数据
bootstrap-select开源地址:https://github.com/silviomoreto/bootstrap-select bootstrap-select使用示例:http://si ...
- thymeleaf下拉框从后台动态获取集合数据并回显选中
今天遇到从后台集合中取出对象在前台页面下拉列表展示: <select name="signature" lay-search="" class=" ...
- 如何获取object数据的描述符
const data = { portLand: '78/50', Dublin: '88/52', Lima: '58/40' } Object.defineProperty(data, 'Lima ...
- ECharts动态获取后台传过来的json数据进行多个折线图的显示,折线的数据由后台传过来
ECharts 多个折线图动态获取json数据 效果图如下: 一.html部分 <p id="TwoLineChart" style="width:100%; he ...
- js动态获取子复选项并设计全选及提交
在做项目的时候,会遇到根据父选项,动态的获取子选项,并列出多个复选框,提交时,把选中的合并成一个字符提交后台 本章将讲述如何通过js控制实现该操作: 1:设计父类别为radio,为每一个radio都加 ...
- js动态添加table 数据tr td
成果库修改: 要求主题列表随成果类型改变而改变 网上查询资料后开工,在成果类型下拉框添加change()事件触发Dwr,查询主题集合——动态创建/编辑Table 概要代码 ...
随机推荐
- Update操作浅析,一定是先Delete再Insert吗?
Update操作一定是先Delete再Insert吗? Update在数据库中的执行是怎么样的?“Update操作是先把数据删除,然后再插入数据”.在网上看了很多也都是这么认为的.但在查阅到一些不同看 ...
- 学习笔记之#pragma
http://baike.baidu.com/link?url=lxA9Wl1KnacWUDZYz5U06iKMkUAeI6dr0x1wQ4i-rqf6Dpk6hEeOOaj2XhvGx9VLVm2z ...
- Class File Editor: Source not found
问题: 找不到需要的 *.java 文件就会报以下错误. 解决方案: 1. Window -> preferences -> Java -> Installed JREs 2. 选择 ...
- 关于Eclipse中的快捷键占用的解决.
刚进公司用的之前离职员工的电脑,打开Eclipse经常用的一个alt+/ 内容提示快捷键就是不好使. 让同事帮忙之后才发现原因. 在eclipse中快捷键设置是在 windows---->pr ...
- Centos 6.4 安装elasticsearch+kibana
elasticsearch和kibanna的链接地址:https://www.elastic.co/downloads,我的环境里用的包为kibana-4.1.1-linux-x64.tar.gz和e ...
- 一点关于this的理解
关于this,是很多前端面试必考的题目,有时候在网上看到这些题目,自己试了一下,额,还真的错了!在实际开发中,也会遇到 this 的问题(虽然一些类库会帮我们处理),例如在使用一些框架的时候,例如:k ...
- JDBC与ODBC的区别与应用
jdbc是使用通过JAVA的数据库驱动直接和数据库相连,而jdbc-odbc连接的是ODBC的数据源,真正与数据库建立连接的是ODBC! 建议使用JDBC直接连接,同时最好使用连接池! JDBC 是 ...
- .net在Controller里的方法添加[HttpGet]和[HttpPost]
前端用post过来,Controller就要用[HttpPost],前端用get,Controller就要用[HttpGet],或者不管前端用什么,Controller都不加这些. 前端用post $ ...
- apk 反编译记录
反编译资源文件 工具:apktool 使用命令:java -jar apktool.jar d test.apk apktool官网下载地址:github 反编译classes.dex文件 工具:de ...
- redirect_uri参数错误解决方法
坑,微信改来改去的,找死人了,以前在“开发者中心”中,现在改在”接口权限“中了.