[英]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.