C#中List泛型集合引用问题(深度拷贝)

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 oldList = new List();   
oldList.Add(..);//添加元素   
List newList = new List(oldList);   

如果说T是值类型,那么oldList和newList是两个对象;如果说T是对象(如自己定义的实体类),那么就会出现问题,更改oldList集合的实体对象,newList集合也会更改。(我遇到的问题是:程序初始化的时候会给oldList赋值,这个原始值是为了还原用的,newList是用户对oldList集合修改后的集合,后面就不用说了,我自己也是够逗逼的…….)

解决办法

public static IList Clone(this IList listToClone) where T: ICloneable   
{   
 return listToClone.Select(item =>(T)item.Clone()).ToList();                     
}  

说明

ICloneable接口中含有一个Clone的方法,可以创建作为当前实例副本的新对象。

你可能感兴趣的:(c#,Silverligh,深度拷贝)