今天我用List<T>的时候,想要复制一个List到另外一个List。刚开始我以为c#已经高端到和python一样,直接等于就行了。

当程序跑不动的时候,我发现果然c#还是骚不过python。所以c#的List<T>到底该怎么复制呢?


参考博客:https://www.cnblogs.com/MRRAOBX/articles/6979479.html


这个博客讲的很好,我这里就直接复制过来吧恩(没错就是这么懒)。

由于List之间的相等的话,等于是把List的地址给赋值过去了,赋值后的List变化,会改变原有的List,并没有起到备份原始数据的作用,对于没有嵌套的List,可以采用遍历重新赋值的方法去赋值(传递的是值类型,并非引用类型),若List内的数据是一个类的话,赋值的时候需要重新实例化才行。但如果是嵌套的List列表,遍历这种方法就麻烦了很多。

因此,常见的对List进行复制克隆的方法,有以下三种:

方法一:

1

2

List<string> t = new List<string>(); //original

List<string> t2 = new List<string>(t.ToArray()); // copy of t

方法二(个人推荐):

1

2

3

4

5

6

It is a one liner using LINQ.

List<string> list1 = new List<string>();

List<string> list2 = new List<string>();

// This will copy all the items from list 1 to list 2

list1.ForEach(i => list2.Add(i));

方法三:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

using System;

using System.Linq;

using System.Collections.Generic;

using System.Diagnostics;

namespace Delegates

{

class X

{

public int Id { get; set; }

public string Name { get; set; }

}

class Y

{

public int Id { get; set; }

public string Name { get; set; }

}

class Program

{

static void Main(string[] args)

{

List<X> x = new List<X>();

for (int i = 0; i < 100; i++)

x.Add(new X { Id = i, Name = string.Format("x_{0}", i.ToString()) });

// copy x to y

List<Y> y = new List<Y>(x.ConvertAll<Y>(e => { return new Y { Id = e.Id, Name = e.Name }; }));

Debug.Assert(x.Count == y.Count);

}

}

}

可以通过在VS2013的即时窗口中,输入&+变量名称来查看变量的地址,通过查看两个变量的地址是否一致来验证方法的正确性。

我用第二个的时候好像没成功。所以直接用的第一个,如下:

//_refPosition = point; //直接赋值并不能成功_refPosition = new List<Point>(point.ToArray());

然后就成功了,真开心。感谢原文博主

c#之List深度复制相关推荐

  1. JS如何深度复制对象和数组,避免指针变量引用修改值

    //自定义深度复制对象or数组的递归方法---------------------------------------- let copyObjOrArr = o => {let isArray ...

  2. 利用序列化与反序列化对Java对象进行深度复制

    来源  http://lhg803.iteye.com/blog/407270 JDK的API中的java.lang.Object和Cloneable接口要完美实现深度clone时,都需要针对具体的类 ...

  3. 深度复制_Python 列表切片陷阱:引用、复制与深复制

    Python 列表的切片和赋值操作很基础,之前也遇到过一些坑,以为自己很懂了.但今天刷 Codewars 时发现了一个更大的坑,故在此记录. Python 列表赋值:复制"值"还是 ...

  4. javascript 数组和对象的浅复制和深度复制 assign/slice/concat/JSON.parse(JSON.stringify())...

    javascript 数组和对象的浅度复制和深度复制 在平常我们用 '='来用一个变量引用一个数组或对象,这里是'引用'而不是复制下面我们看一个例子引用和复制是什么概念 var arr=[1,2,3, ...

  5. java map 的复制,Java Map的深度复制和浅复制

    来看一段代码,猜一下运行结果! //给 list 放入 2个map对象 Listlist = new ArrayList(); Map map1 = new HashMap(); map1.put(& ...

  6. vue clone html,Vue.js之slot深度复制详解

    前言 在Vue中,slot是一个很有用的特性,可以用来向组件内部插入一些内容.slot就是"插槽"的意思,用大白话说就是:定义组件的时候留几个口子,由用户来决定插入的内容. 例如我 ...

  7. C#复制和深度复制的实现方法

    深度复制与浅表复制的区别在于,浅表复制只复制值类型的值,而对于实例所包含的对象依然指向原有实例. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2 ...

  8. js深度复制一个对象使用JSON.stringify是最好的办法吗

    转载自   js深度复制一个对象使用JSON.stringify是最好的办法吗 深度复制一个对象,看到很多种方法,最简单的是: var newObject = JSON.parse(JSON.stri ...

  9. C++再议构造函数及复制构造函数深度复制

    1.一般构造函数 如果没有提供任何构造函数,创建一个什么都不做的构造函数 如: test::test() {} 如果希望编译器不使用这种默认的构造函数 可以自己定义默认构造函数 test::test( ...

  10. [转载] python中字典copy_python深度复制字典,copy方法与deepcopy方法

    参考链接: Python字典copy() 简介 INTRODUCTION掌握python中字典数据的赋值处理,掌握指针到底在哪里?... 本篇文章创作主要是为了让小伙伴们掌握普通字典的赋值.字典的co ...

最新文章

  1. Meta旨在打造世界上最快的人工智能超级计算机
  2. 配置管理篇(0)_SaltStack 安装
  3. ZieglerNicholas PID GUI控制设计
  4. 数据中心碳中和白皮书
  5. Android 操作系统为什么不启用swap?
  6. 数论杂谈(欧拉定理与费马小定理结论与应用)
  7. Java IO: 其他字节流(上)
  8. 最大的矩形(ccf)
  9. 2021 前端面试经常被问到 Javascript+HTML5+CSS+ 框架问题(89 篇资料总结)
  10. Springboot,log文件配置时,logging.file.name与logging.file
  11. 【服务器环境搭建-Centos】tmpfs,【转载】
  12. RK3399的ADC配置指南
  13. Android-APP之桌面宠物
  14. 最新版 INSPINIA IN+ - WebApp Admin Theme v2.7.1,包含asp.net MVC5示例代码,做管理系统最佳的选择。...
  15. 螺旋分级机与水力分级机间的优缺点
  16. Word 论文排版操作顺序
  17. java不小于等于符号怎么打_java 大于等于号怎么打 java编程里面 x大于
  18. ipad端网页屏幕变小了
  19. JDK11下J2Cache序列化器反射异常及--illegal-access解决方案
  20. How Linux Boots

热门文章

  1. PC传输图片到Hololens
  2. AI会玩魔方了!全是自学,比任何人都快,包括机器人
  3. 测试第一步,雀氏纸尿裤
  4. 【每日一P】简单实用的调色原理
  5. three实战:月球围绕地球
  6. Technica Engineering Enhanced Ethernet Switch, 车载以太网交换机功能介绍(100/1000BASE-T1 Switch, AVB/TSN)
  7. 钟汉良日记:2年10个月后第一次坐车回家
  8. Statistic Helper 开发自查帮助文档(五):Sliced Inverse Regression
  9. 树莓派自动饮水机编程示例
  10. 从桌面运维转到网工后,我是怎样成为大厂高级网工的