您的位置:首页 > 编程语言 > C#

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的方法,可以创建作为当前实例副本的新对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  微软 泛型