public static class ExtensionMethods
{
// Deep clone
public static T DeepClone<T>(this T a)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, a);
stream.Position = 0;
return (T) formatter.Deserialize(stream);
}
}
}
4条答案
按热度按时间p4tfgftt1#
据我理解你的问题,你需要创建一个深拷贝的信息对象
下面是一个solution(使用序列化)
像这样创建扩展方法:
使用它:
通常,需要深度克隆意味着需要代码重构。不一定,但经常..我认为应该有一个更好的解决方案,在你的情况下,比复制对象。
hc8w905p2#
你要么需要克隆info变量,要么需要重新分配它。手工克隆它将是相当多的工作,而且可能很脆弱,所以我建议这样做:
另一个选择,如果你在到达这里之前没有改变info变量,将使用GetInfo设置checkInfo。考虑这样一个事实,如果是这种情况,GetInfo将为两者构建相同的对象,因此你会得到相同的结果。
u4dcyp6a3#
您可以将FileInfo类隐藏/ Package 在另一个类中,并让其他线程仅访问 Package 类。 Package 类可以在其他线程更改FileInfo时触发事件,例如FileInfoChanged。
dfuffjeb4#
我认为最简单的解决方法是:
然后,您可以更改信息,而checkInfo不会受到更改的影响。