gpt4 book ai didi

c# - 我需要深拷贝吗?

转载 作者:行者123 更新时间:2023-11-30 22:21:01 26 4
gpt4 key购买 nike

我有一个对象列表,比如说 List<Bar> barlist .这些Bar orbjects 相当复杂,我很乐意在不深入复制它们的情况下继续。

但是,我想允许用户使用 BindingSource 修改它们, BindingNavigator和一个 DataGridView .但是,如果我设置 DataSource到我的酒吧列表并修改值,BindingSource修改我的列表(因为它显然不包含自己的列表,或者只使用浅拷贝)。

问题是:如果用户想要放弃他的更改怎么办?如果我给出 BindingSource,我将不得不手动还原它们或不将它们应用到原始列表一个深度复制的列表。但是,我想避免深度复制。

是否有替代路径?或者我别无选择,只能将对象标记为 Serializable并深度复制它们?

最佳答案

作为记录,我使用了以下深度克隆功能来解决问题。它可能不是最好的解决方案,但它已经足够并且工作得很好(尽管仅适用于可序列化对象)

// Creates a deep copy of an Object
public static T DeepClone<T>(T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;

return (T)formatter.Deserialize(ms);
}
}

关于c# - 我需要深拷贝吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14663017/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com