首页 > 解决方案 > .Net 中是否有一个类来存储一个值和一个先前的值?

问题描述

我需要存储对象的当前值及其先前的值。我想出了这样的事情:

struct TwoStepHistory<T>
{
    private T _v0;

    public T Value
    {
        get
        {
            return _v0;
        }
        set
        {
            OldValue = _v0;
            _v0 = value;
        }
    }

    public T OldValue { get; private set; }
}

但它看起来如此明显和简单,以至于我认为 BCL 或 dotnet 中的其他地方一定有一些东西在做同样的事情。不想重新发明自行车,你知道的。有人知道类似的结构吗?

有一些评论这是否可用于引用类型,这里有一个例子,一切正常,不知道为什么人们会感到困惑。https://dotnetfiddle.net/BSm1Pz,带有目标对象突变的 v2:https ://dotnetfiddle.net/DGkAgv

标签: c#.net

解决方案


不,BCL 中没有任何内容支持这一点。与基础库相比,它是一个更好的实现细节留给应用程序开发人员。

几点注意事项:

  1. 结构应该是不可变的
  2. 您可能需要考虑存储旧项目的副本,而不是对其的引用- 可以从其他地方更改(参见:https ://dotnetfiddle.net/HOqLuq )

推荐阅读