我总结了我比较常用的数组复制方法,还有计算运行效率,代码看下面的:
最终都是得到一个新的List数组,方法二是复制后再ToList一下的
第一个是值类型
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();
for (int i = 0; i < 100000000; i++)
{
list.Add(i);
}
Stopwatch sw = new Stopwatch();
sw.Start();
List<int> list1 = new List<int>(list);
sw.Stop();
Console.WriteLine($"方法一:{sw.ElapsedMilliseconds}");
sw.Restart();
int[] data = new int[list.Count];
list.CopyTo(data);
List<int> list2 = data.ToList();
sw.Stop();
Console.WriteLine($"方法二:{sw.ElapsedMilliseconds}");
sw.Restart();
List<int> list3 = list.ToArray().ToList();
sw.Stop();
Console.WriteLine($"方法三:{sw.ElapsedMilliseconds}");
sw.Restart();
List<int> list4 = list.Take(list.Count).ToList();
sw.Stop();
Console.WriteLine($"方法四:{sw.ElapsedMilliseconds}");
Console.ReadKey();
}
}
}
第二个是引用类型
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>();
for (int i = 0; i < 100000000; i++)
{
list.Add("abc");
}
Stopwatch sw = new Stopwatch();
sw.Start();
List<string> list1 = new List<string>(list);
sw.Stop();
Console.WriteLine($"方法一:{sw.ElapsedMilliseconds}ms");
sw.Restart();
string[] data = new string[list.Count];
list.CopyTo(data);
List<string> list2 = data.ToList();
sw.Stop();
Console.WriteLine($"方法二:{sw.ElapsedMilliseconds}ms");
sw.Restart();
List<string> list3 = list.ToArray().ToList();
sw.Stop();
Console.WriteLine($"方法三:{sw.ElapsedMilliseconds}ms");
sw.Restart();
List<string> list4 = list.Take(list.Count).ToList();
sw.Stop();
Console.WriteLine($"方法四:{sw.ElapsedMilliseconds}ms");
Console.ReadKey();
}
}
}