在其中包含数组的结构的深层副本?

时间:2017-07-05 10:39:57

标签: c# deep-copy

谷歌搜索后我才知道除非你手动完成,否则它是不可能的。以此代码为例:

public struct SEverything
{
    public int[] arrayOfHouseNumbers;
    public string nameOfOwner;
}

我只知道复制它的一种非常麻烦的方法,以及创建一个新结构并按照这样做:

private void CopySEverything()
{
    sEverythingCopy = new SEverything();
    sEverythingCopy.nameOfOwner = sEverythingOriginal.nameOfOwner;
    sEverythingCopy.arrayOfHouseNumbers = new         
    int[sEverythingOriginal.arrayOfHouseNumbers.Length];

    for (int i = 0; i < sEverythingCopy.Length; i++)
    {
        sEverythingCopy[i] = sEverythingOriginal[i];
    }
}

我使用了一个更复杂的结构,如果对一个大结构执行上述操作会非常烦人,更不用说如果更改了结构的结构,则必须重写代码。任何建议都是非常受欢迎的。

e:正在序列化和反序列化一个好的选项吗?

1 个答案:

答案 0 :(得分:0)

private void CopySEverything()
{
    sEverythingCopy = new SEverything();
    sEverythingCopy.nameOfOwner = sEverythingOriginal.nameOfOwner;
    sEverythingCopy.arrayOfHouseNumbers = new         
    int[sEverythingOriginal.arrayOfHouseNumbers.Length];

    for (int i = 0; i < sEverythingCopy.Length; i++)
    {
        sEverythingCopy[i] = sEverythingOriginal[i];
    }
}

可以简化为:

private void CopySEverything()
{
    sEverythingCopy = new SEverything();
    sEverythingCopy.nameOfOwner = sEverythingOriginal.nameOfOwner;
    sEverythingCopy.arrayOfHouseNumbers = sEverythingOriginal.arrayOfHouseNumbers.ToArray();
}

您还应该考虑https://github.com/Burtsev-Alexey/net-object-deep-copy/blob/master/ObjectExtensions.cs