C#结构体的深拷贝代码示例
时间: 2024-10-24 08:03:37 浏览: 30
在C#中,由于结构体默认是值类型,它们的成员会被隐式地复制到新的实例中,这被称为浅拷贝。但是,如果结构体内部有引用类型成员,如另一个结构体或类,你需要手动实现深拷贝,以便完全独立地复制这个结构体,包括其嵌套内容。你可以通过序列化和反序列化的方式来实现深拷贝,这里提供一个简单的`System.IO.BinaryFormatter`的例子:
```csharp
using System;
using System.IO;
public struct InnerStruct
{
public int Value;
}
public struct OuterStruct
{
public InnerStruct Inner;
}
public class DeepCopyExample
{
public static OuterStruct DeepCopy(OuterStruct original)
{
// 使用BinaryFormatter进行序列化和反序列化实现深拷贝
using (MemoryStream ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, original);
ms.Seek(0, SeekOrigin.Begin);
return (OuterStruct)formatter.Deserialize(ms);
}
}
public static void Main(string[] args)
{
OuterStruct orig = new OuterStruct { Inner = new InnerStruct { Value = 42 } };
OuterStruct copied = DeepCopy(orig);
// 修改原结构体的Inner不会影响深拷贝
orig.Inner.Value += 1;
Console.WriteLine($"Original Inner: {orig.Inner.Value}");
Console.WriteLine($"Copied Inner: {copied.Inner.Value}");
}
}
```
在这个例子中,`DeepCopy`函数创建了一个内存流,并将其设置为序列化器的目标。然后,序列化器将`original`结构体及其所有成员(包括嵌套的`InnerStruct`)写入流,接着反序列化从流中恢复一个新的独立副本。
阅读全文