簡體   English   中英

如何檢索變量的先前值?

[英]How can I retrieve previous value of a variable?

如何檢索變量的先前值? 考慮到這一點:

Int x = 0;
x = 5; 
x = 10; 

如何檢索x的兩個舊值?

如何檢索變量的先前值?

您可能需要堆棧。 堆棧是您只能從一側添加(推送)和刪除(彈出)項目的結構。

Stack<int> x = new Stack<int>();
x.Push(0); // push first value
x.Push(5); // second value after first value
x.Push(10); //...

現在,在堆棧的頂部有10個。您可以向后移動。

var value = x.Pop(); // 10
var pre = x.Pop();   // 5
var prePre = x.Pop();// 0

請注意,如果堆棧為空, Pop將引發異常。 還可以從堆棧頂部獲取項目而不刪除它,您可以使用Peek。

var value = x.Peek(); // 10
var value2 = x.Peek();// still 10

請注意,Stack內部使用數組。

我會將它們放在列表中。

var values = new List<int>();

int x = 0;
values.Add(x);
x=5;
values.Add(x);
x=10;
values.Add(x);

非常簡單。

List<int> iList = new List<int>();
iList.Add(10);
iList.Add(20);

...

然后,您可以簡單地通過以下方式獲得它:

iList.ElementAt(0);
iList.ElementAt(1);

要么

iList.Last();
iList.First();

甚至:

iList.Where(x => x > 5).First();

您需要將它們定義為單獨的變量。 int var1,int var2等...

一旦重新分配了值,就無法跟蹤變量。 您將不得不創建更多變量。 像這樣:

var x = 0;
var x1 = 5;
var x2 = 10;

根據您的邏輯,分配或獲取所需的值。

它是局部變量和字段的常規屬性之一。 值類型和引用類型沒有區別。 您的變量包含其值(或指向堆中值的指針)。

當您使用賦值運算符“ =”時,您實際上是在變量上替換值。 對於值類型,您將無法獲得先前的變量,因為每個賦值都會創建一個新變量。 對於引用類型賦值,只需替換指向該值的指針,然后如果您將保存指向'em的指針,則可以檢索您的舊值。

裝箱和拆箱的特殊情況。

您的問題的答案非常簡單:您可以在進行新的分配之前保存以前的價值。 上面的答案使用新變量實現了最簡單的方法:

var x = 0;
var x1 = 5;
var x2 = 10;

如果您不知道代碼中將分配多少個任務,則可以實現最簡單的歷史記錄集合。

List<int> xHistoy = new List<int>(); // Or Queue<int>
int x;
private int AssignWithHistory(int val)
{
    xHistory.Add(val);
    return x;
}

x = AssignWithHistory(0);
x = AssignWithHistory(5);
x = AssignWithHistory(10);

但是我認為主要目標不是實現您的方案,而是了解變量的原理及其在內存中的存儲。

您可以執行以下操作:

    private int _x;

    private int X
    {
        get { return _x; }
        set
        {
            _x = value;

            if (XHistory == null)
            {
                XHistory = new List<int> {_x};
            }
            else
            {
                XHistory.Insert(0, _x);
            }
        }
    }

    private List<int> XHistory { get; set; }

    private void ShowHistoryOfX() => XHistory?.ForEach(Console.WriteLine);

每次為X賦值時,它將添加到歷史記錄列表中,然后可以將其打印出來。 最近的更改將插入到列表的開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM