C# list深度拷贝
时间: 2023-07-20 08:31:53 浏览: 74
在 C# 中,可以使用以下方法来实现 List 的深度拷贝:
1.使用 Linq:
```csharp
List<T> newList = originalList.Select(item => (T)item.Clone()).ToList();
```
这种方法假定 T 实现了 ICloneable 接口,并且 Clone 方法已正确实现。
2.使用序列化和反序列化:
```csharp
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
List<T> newList;
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, originalList);
ms.Position = 0;
newList = (List<T>)formatter.Deserialize(ms);
}
```
这种方法需要 T 是可序列化的。
3.手动创建新的 List 并复制每个元素:
```csharp
List<T> newList = new List<T>();
foreach (var item in originalList)
{
T newItem = new T();
// 复制每个属性
newList.Add(newItem);
}
```
这种方法需要 T 有一个无参数构造函数,并且需要手动复制每个属性。