在C#中,要正确地复制带有字节数组的结构,可以使用结构体的MemberwiseClone()
方法。该方法会创建一个当前结构的浅表副本,包括字节数组。浅表副本意味着副本和原始结构共享相同的字节数组,因此对副本或原始结构的字节数组进行修改都会影响到另一个。
以下是一个示例代码:
using System;
public struct MyStruct
{
public int Id;
public byte[] Data;
}
public class Program
{
public static void Main()
{
MyStruct original = new MyStruct();
original.Id = 1;
original.Data = new byte[] { 1, 2, 3, 4, 5 };
MyStruct copy = (MyStruct)original.MemberwiseClone();
Console.WriteLine("Original: Id={0}, Data={1}", original.Id, BitConverter.ToString(original.Data));
Console.WriteLine("Copy: Id={0}, Data={1}", copy.Id, BitConverter.ToString(copy.Data));
// 修改副本的字节数组
copy.Data[0] = 10;
Console.WriteLine("Original: Id={0}, Data={1}", original.Id, BitConverter.ToString(original.Data));
Console.WriteLine("Copy: Id={0}, Data={1}", copy.Id, BitConverter.ToString(copy.Data));
}
}
输出结果为:
Original: Id=1, Data=01-02-03-04-05
Copy: Id=1, Data=01-02-03-04-05
Original: Id=1, Data=01-02-03-04-05
Copy: Id=1, Data=0A-02-03-04-05
在这个示例中,我们创建了一个包含Id
和Data
字段的结构体MyStruct
,Data
字段是一个字节数组。我们使用MemberwiseClone()
方法创建了一个副本copy
,并修改了副本的字节数组。可以看到,修改副本的字节数组后,原始结构的字节数组并没有受到影响。
腾讯云相关产品和产品介绍链接地址:
请注意,以上链接仅为示例,具体的产品选择应根据实际需求进行评估和选择。
领取专属 10元无门槛券
手把手带您无忧上云