簡體   English   中英

C# 深拷貝列表<t></t>

[英]C# deep copy list<T>

我正在嘗試深度復制一些列表。 我使用 System.Runtime.Serialization 復制 object,而它出現此錯誤: System.ArgumentNullException: 'Value cannot be null. (參數'圖')'

非常感謝!!

克隆方法

public static T Clone<T>(T RealObject)
        {
            using (Stream objectStream = new MemoryStream())
            {
                //利用 System.Runtime.Serialization序列化與反序列化完成引用對象的復制
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(objectStream, RealObject);
                objectStream.Seek(0, SeekOrigin.Begin);
                return (T)formatter.Deserialize(objectStream);
            }
        }

這個例子

private void AddVariant()
    {
        ShouldRender();
        Count++;

        VKDTI VKDTI = KeyInfoMethod.GetNewVKDTI();
        VKDTI.Variant = Count.ToString();

        //l_VKDTI_TSI.Add(l_VKDTI_TSI.FirstOrDefault());
        l_VKDTI_TSI_Copy.Add(KeyInfoMethod.Clone<VKDTI_TSI>(l_VKDTI_TSI.FirstOrDefault()));
        l_VKDTI_VI_Copy.Add(KeyInfoMethod.Clone<VKDTI_VI>(l_VKDTI_VI.FirstOrDefault()));
        l_VKDTI_DIMENSIONS_Copy.Add(KeyInfoMethod.Clone<VKDTI_DIMENSIONS>(l_VKDTI_DIMENSIONS.FirstOrDefault()));
        l_VKDTI_VW_Copy.Add(KeyInfoMethod.Clone<VKDTI_VW>(l_VKDTI_VW.FirstOrDefault()));
        l_VKDTI_ENGINE_Copy.Add(KeyInfoMethod.Clone<VKDTI_ENGINE>(l_VKDTI_ENGINE.FirstOrDefault()));
        l_VKDTI_TRANSMISSION_Copy.Add(KeyInfoMethod.Clone<VKDTI_TRANSMISSION>(l_VKDTI_TRANSMISSION.FirstOrDefault()));
        l_VKDTI_DRIVETRAIN_Copy.Add(KeyInfoMethod.Clone<VKDTI_DRIVETRAIN>(l_VKDTI_DRIVETRAIN.FirstOrDefault()));
        l_VKDTI_TAW_Copy.Add(KeyInfoMethod.Clone<VKDTI_TAW>(l_VKDTI_TAW.FirstOrDefault()));
        l_VKDTI_HUMP_Copy.Add(KeyInfoMethod.Clone<VKDTI_HUMP>(l_VKDTI_HUMP.FirstOrDefault()));
        l_VKDTI_WAP_Copy.Add(KeyInfoMethod.Clone<VKDTI_WAP>(l_VKDTI_WAP.FirstOrDefault()));
        l_VKDTI_PEDAL_Copy.Add(KeyInfoMethod.Clone<VKDTI_PEDAL>(l_VKDTI_PEDAL.FirstOrDefault()));
        l_VKDTI_BOOSTER_Copy.Add(KeyInfoMethod.Clone<VKDTI_BOOSTER>(l_VKDTI_BOOSTER.FirstOrDefault()));
        l_VKDTI_MC_Copy.Add(KeyInfoMethod.Clone<VKDTI_MC>(l_VKDTI_MC.FirstOrDefault()));
        l_VKDTI_FB_Copy.Add(KeyInfoMethod.Clone<VKDTI_FB>(l_VKDTI_FB.FirstOrDefault()));
        l_VKDTI_RB_Copy.Add(KeyInfoMethod.Clone<VKDTI_RB>(l_VKDTI_RB.FirstOrDefault()));
        l_VKDTI_OVI_Copy.Add(KeyInfoMethod.Clone<VKDTI_OVI>(l_VKDTI_OVI.FirstOrDefault()));
        l_VKDTI_Copy.Add(KeyInfoMethod.Clone<VKDTI>(l_VKDTI.FirstOrDefault()));

        if (l_ESPTI_VAF_ALL_SELECTED.Count > 0)
        {
            l_ESPTI_VAF_ALL_Copy.Add(KeyInfoMethod.Clone<ESPTI_VAF_ALL>(l_ESPTI_VAF_ALL.FirstOrDefault()));
            l_ESPTI_VAF_ALL_SELECTED_Copy.Add(KeyInfoMethod.Clone<ESPTI_VAF_ALL>(l_ESPTI_VAF_ALL_SELECTED.FirstOrDefault()));
        }

        StateHasChanged();
    }

如果您查看.Serialize的文檔,您會發現 Null 不是graph參數的有效值。 在您的情況下,這將是RealObject

因此,您似乎正在嘗試序列化 null object。 您在很多地方使用.FirstOrDefault() ,這可能會返回 null,從而導致您觀察到的問題。 通過插入空檢查來修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM