[英]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.