如何在分配的变量值更改时停止变量更改 C#

How to stop a variable from changing as and when the assigned variable value changes C#

我有两个 ObservableCollection 数据类型的 ObservableCollection 变量 temporiginal。 我在某个时候分配了 original = temp 。 temp 集合在不同时间以不同的值不断变化。 我希望只有在我这样做时才更改原件:original = temp 特别是休息所有时间它应该保持 旧分配值 并且不应该改变在它发生变化时进行临时处理。 我怎样才能在 C# 中实现这一点。请帮助

最简单的方法是在创建临时文件时对原始文件进行深拷贝。默认情况下,复制任何复杂对象只会对对象引用进行浅表复制(基本上它使您的新变量指向与旧变量相同的位置),因此任何更改都将反映在两个变量中。你想要的是一个具有相同数据的新对象。实现此目的的最简单方法是使用 Json

进行深度复制
public static T Clone<T>(T baseObject)
{
    return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(baseObject));
}

在您的代码中,当您创建 temp 时,以及每当您将 original 设置为 temp 的值时,请使用克隆方法而不是仅设置 'original=temp'。上面的代码使用 json 将你的对象变成它的 json 字符串表示,然后使用所述字符串

创建一个完全独立的对象

请注意,此方法并不总是适用:

您正在使用的 classes 可能具有内置的深度复制方法。例如,XElement 将允许您将 XElement 传递给其构造函数以进行深度复制,如果您使用的 class 具有这样的方法 - 所述方法可能比仅使用 Json 进行深度复制更好地优化。大多数 classes 将使用 json,但根据 class 使用显式深复制方法可能更安全。

您的 class 也可能是自引用的,缺少一个空的构造函数,包含具有这些属性的其他 class 或它可能有一些其他 属性 使得 json 转换有问题。如果是这种情况,您可能想要创建自己的深层复制方法。基本上只需将另一个构造函数添加到你的 class 中,它接受一个自身的实例 - 在构造函数中复制每个简单的 属性,并且对于每个复杂的 属性 或者 json 复制属性 跨越或处理它,但在您的用例中效果最好。您通常不需要走这么远,但对于非常复杂的 classes,您可能必须这样做。您还可以创建一个 'json Friendly' class,它可以在您有问题的 class 之间来回转换并以这种方式工作。