C#中List泛型集合引用问题(深度拷贝)
2017-04-06 09:48
225 查看
List 集合引用问题
这段时间公司有个Silverlight项目要加几个报表模块,之前从未接触过这个叫“银光”的东西,之前在学校也是做的Net,迫于无赖就接手了,说说这个把月的心得以及遇到的问题。首先说下什么是Silverlight,官网的解释是:Microsoft Silverlight 是一个跨浏览器、跨平台的 .NET Framework 实现,用于生成 Web、桌面和 Windows Phone 的媒体体验和丰富交互式应用程序。我个人的理解是:
Silverlight类似一种B/S架构的东西,只不过它能在浏览器上跑起来而已(在IE上按F12后DOM元素无法选中)
Silverlight提供一系列的控件(DataGrid,Button,Label……等这些东西)
Silverlight最常用的布局是Grid布局
Silverlight后台语言用的是C#
Silverlight现在好像只能在IE上用(好像停止维护了)
公司这老项目用的最多的东西就是:匿名委托,Http异步请求,Lambda表达式,Linq(这些东西还是蛮有用的,也是C#语言强悍的地方,有兴趣可以看看看)
废话就说到这儿了,现在是我遇到的问题:
一. 值传递和引用问题
代码块
List<T> oldList = new List<T>(); oldList.Add(..);//添加元素 List<T> newList = new List<T>(oldList);
如果说T是值类型,那么oldList和newList是两个对象;如果说T是对象(如自己定义的实体类),那么就会出现问题,更改oldList集合的实体对象,newList集合也会更改。(我遇到的问题是:程序初始化的时候会给oldList赋值,这个原始值是为了还原用的,newList是用户对oldList集合修改后的集合,后面就不用说了,我自己也是够逗逼的…….)
解决办法
public static IList<T> Clone<T>(this IList<T> listToClone) where T: ICloneable { return listToClone.Select(item =>(T)item.Clone()).ToList(); }
说明
ICloneable接口中含有一个Clone的方法,可以创建作为当前实例副本的新对象。相关文章推荐
- C#中List<T>对象的深度拷贝问题
- C#中List<T>对象的深度拷贝问题
- C#中泛型集合List<T>反序列化问题及解决方法
- C#中List<T>对象的深度拷贝问题
- C#中List<T>对象的深度拷贝问题
- Java 泛型 集合引用赋值问题(或方法传参)
- C# 泛型集合List和非泛型集合ArrayList的性能比较
- C# 泛型集合List和非泛型集合ArrayList的性能比较
- C#关于继承后,添加泛型集合中后,再次遍历的问题 !!!
- C#泛型集合List<T>自带方法之排序
- C#中关于在List集合类中使用泛型的例子
- 黑马程序员_学习日记39_604基础加强(垃圾回收、弱引用、集合ArrayList和Hashtable、泛型集合List和Dictionary、var)
- NET C# List泛型集合 使用方法
- C# List泛型集合
- C#泛型集合 --List-- 揽胜
- C# List泛型集合(转)
- c#利用链表模拟实现泛型集合List﹤T﹥
- C#读取数据库返回泛型集合(DataSetToList)
- 关于c# 泛型List集合对象的用法及相关操作
- C# List泛型集合