利用dynamic解决匿名对象不能赋值的问题
关于匿名对象
匿名对象是.Net Framework 3.0提供的新类型,例如:
var obj = { Name = "aa", Value = 1 };
就是一个匿名类,搭配Linq,可以很灵活的在代码中组合数据,例如:
var r = from p in DbContext.Actions
select new {
A = p.Name,
B = p.Text
};
特殊需求:给匿名对象属性赋值
但有时候会有一些特殊的要求,需要给获取的匿名对象的某些属性进行赋值,例如如下的代码:
//根据上例使用LINQ获取的结果集foreach(var item in r) { item.A = "new name"; }
以上这段代码在运行时,会抛出异常“该对象的属性是只读的”。说明匿名类在内部实现上,只能在初始化的时候赋值,如果想再次改变,对不起,这样是不可以的。
解决方案
但有的时候确实是有这样的需求,那有什么方法可以解决呢? 经过研究,发现可以采用如下的方案解决,本人已经验证通过。
答案就是使用C# 4.0里面新提供的动态类型:dynamic
直接上代码,想必大家一看就明白了:
//声明dynamic泛型集合List<dynamic> newpayList = new List<dynamic>(); payList.ForEach(t => {//new 一个ExpandoObject对象 dynamic d = new System.Dynamic.ExpandoObject(); d.IntervalDay = 0; d.Percent = Math.Round(t.Amount / totalRevenue, 4); d.Amount = adjAmount * Math.Round(t.Amount / totalRevenue, 4); d.PayDate = t.EstPaymentDate; d.IsLast = false; newpayList.Add(d); }); var count = newpayList.Count();for (int i = 0; i < count; i++) {var item = newpayList[i];if (i != 0) {//改变动态类型的属性值 item.IntervalDay = (item.PayDate - newpayList[i - 1].PayDate).Days; }if( i == count - 1) item.IsLast = true; }
用动态类型取代匿名对象,但实际上,它们之间又有着紧密的联系,在某些时候,匿名对象和dynamic是等价的,这为我们开发带来了很大的灵活性,但这样做的性能开销目前还没有深入研究,如果有哪位朋友测试过,也请告知,谢谢。
转载于:https://www.cnblogs.com/qiuliang/archive/2012/02/17/2356272.html
利用dynamic解决匿名对象不能赋值的问题相关推荐
- dynamic和匿名对象
有时需要使用匿名对象存储数据,而有时需要使用dynamic去提取数据,这里写了一个简单的示例,代码如下 static void Main(string[] args){List<dynamic& ...
- java中常用API、Scanner类、匿名对象、Random类、ArrayList类、对象数组
java中常用API: API:Application Programming Interface,应用程序编程接口.Java API是JDK中提供给我们使用的类的说明文档.这些类将底层的代码实现封装 ...
- JAVA常用API : 匿名对象
匿名对象 //创建一个person对象public static class Person {String name;}public static void main(String[] args) { ...
- Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题
C#的编译器总是将匿名类型编译成internal的,当在视图中直接使用控制器传递的匿名对象时就会报错 错误代码: 控制器代码 视图代码 执行结果: ************************** ...
- dynamic结合匿名类型 匿名对象传参
首先说明下,我一般很少用dynamic关键字(类)的,因为毕竟是由反射实现的,所以对于性能方面还是吃亏不少(注:由于心里没底,查了一些资料得知,dynamic实质上好像不是由反射实现的,其性能也比直接 ...
- 利用viewbag把数据对象传到前端并转换成json对象,及解决json字符串被转义问题
利用viewbag把数据对象传到前端并转换成json对象,及解决json字符串被转义问题 参考文章: (1)利用viewbag把数据对象传到前端并转换成json对象,及解决json字符串被转义问题 ( ...
- c/c++教程 - 2.4.2.1~2 对象的初始化和清理,构造函数和析构函数,构造函数的分类和调用(有参构造,无参构造,普通构造,拷贝构造,括号法,显示法,隐式转换法,匿名对象)
目录 4.2 对象的初始化和清理 4.2.1 构造函数和析构函数 4.2.2 构造函数的分类及调用 相关教程 4.2 对象的初始化和清理 生活中我们买的电子产品都基本会有出厂设置,在某一天我们不用时候 ...
- Java基础super关键字、final关键字、static关键字、匿名对象整理
super关键字 10.1子父类中构造方法的调用 public class Test { public static void main(String[] args) { new Zi(); } } ...
- 面向对象4(匿名对象、内部类、包、修饰符、代码块)
1.匿名对象 指在创建对象的时候,只有创建语句,没将对象地址赋值给某个变量 new Person(); 1.1 特点 1.创建时,可直接使用,没有变量名 new Person().eat(); 2.匿 ...
最新文章
- 谁是 2021「IT 圈」年度 C 位?快来报名,彰显你的影响力!
- Android Logcat的使用
- 关于AutoML的一些笔记
- java性能分析工具_java性能分析工具
- vs不识别0b二进制格式_数据背后的二进制
- 技术应用丨DWS 空间释放(vacuum full) 最佳实践
- 计算机应用专业可以考教师资格证不,电大的大专学历可以考教师资格证吗?
- mysql返回的数据是什么格式_磁盘格式化后能恢复数据吗?先了解什么是格式化...
- 上海交通大学计算机应用作业,上海交通大学继续教育学院计算机应用基础(二)第六次作业计算机安全多媒体_1...
- TensorRt - caffe中支持prelu
- 2018考研信工所二室
- 华为S5700交换机登录认证配置学习笔记
- linux tao环境 安装_菜鸟Linux 编译TAO2.0a的问题,求高手指导
- 如何在WPS中给一组字母上方添加一个横线
- 摄像头、视频采集和摄像设备图像质量判断的几种简单有效目测方法
- 龚文祥自爆今日头条微博自媒体年收入仅1000元!
- EA001-186-2220-蓝豪杰
- poi设置word表格单元格宽度_java poi如何设置word的页面的大小和水平方向?
- 启信宝受益所有人界面_希望您的项目成功吗? 然后确保其他人也可以从您的想法中受益。...
- 全球未来网络与SDN技术大会5月18日拉开帷幕