小编Buo*_*sel的帖子

正确地复制带有(字节)数组的C#结构?

根据我的理解,在将结构变量分配给另一个变量时,通常会复制第一个变量而不是创建引用:

public struct MYSTRUCT1
{
    public byte val1;
}
// (...)
public DoSomething() {
    MYSTRUCT1 test1;
    test1.val1 = 1;
    MYSTRUCT1 test2 = test1;
    test2.val1 = 2;

    Console.WriteLine(test1.val1);
    Console.WriteLine(test2.val1);
}
Run Code Online (Sandbox Code Playgroud)

这很好用,输出是:

1
2
Run Code Online (Sandbox Code Playgroud)

但是,如果我的struct中有一个byte [],则此行为会更改:

public struct MYSTRUCT1
{
    public byte[] val1;
}
// (...)
public DoSomething() {
    MYSTRUCT1 test1;
    test1.val1 = new byte[0x100];
    test1.val1[0] = 1;
    MYSTRUCT1 test2 = test1;
    test2.val1[0] = 2;

    Console.WriteLine(test1.val1[0]);
    Console.WriteLine(test2.val1[0]);
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

2
2
Run Code Online (Sandbox Code Playgroud)

我怎么能避免这个?我真的需要使用完整结构的副本,包括任何字节数组.

谢谢!♪


编辑:感谢您的帮助!为了深层复制我的结构,我现在使用这个代码:

public static object deepCopyStruct(object …
Run Code Online (Sandbox Code Playgroud)

c# arrays struct copy reference

6
推荐指数
1
解决办法
6319
查看次数

标签 统计

arrays ×1

c# ×1

copy ×1

reference ×1

struct ×1