簡體   English   中英

始終保留當前變量值的列表。 C#

[英]List that always holds current variables value. C#

因此,我需要一個列表(或類似的數據結構),該列表一旦添加就始終保持給定變量的當前值。 這是當前發生的情況(以更簡單/偽代碼):

intValue = 5;
intList.Add(intValue);

Print intList[0].toString();

打印“ 5”

intValue++;
Print intList[0].toString();

當我希望它打印intValue的新值“ 6”時,仍打印“ 5”。

基本上,列表需要存儲對intValue的引用(我認為這是正確的術語),而不是實際值。 謝謝你的時間。

您的問題與以下內容非常相似:

如何獲取可變字符串列表?

在接受的答案中更改SortOfMutableString實現,以存儲int值而不是string ,您將獲得所需的效果。

另外,在此處查看Jon Skeet的答案。 這對於全面了解此類解決方案的后果非常重要。

更改列表類型無法完成此操作。 您可能必須創建自己的引用類型,其行為類似於int .net結構不是引用類型,因此無法獲得所需的行為。

您必須意識到,添加到列表中的int只是副本,因此對源所做的任何更改都不會影響副本。

這是因為在C#中, int類型而不是引用類型。 當你寫

intValue = 5;
intList.Add(intValue);

您將一個副本添加到intValue ,而不是對該變量本身的引用。 您想要的是將對變量intValue的引用添加到intList 您可以做的是將int值包裝在您自己的類中(這是一種引用類型)。

由於您將需要存儲引用而不是變量的值,因此可以存儲指針。 您將需要使用unsafe關鍵字在C#中使用指針。

  unsafe
  {
    int intVal=5;
    List<IntPtr> intList = new List<IntPtr> ( );
    intList.Add ( new IntPtr ( &intVal ) );
    MessageBox.Show ( ( *( ( int* ) ( intList[0].ToPointer ( ) ) ) ).ToString ( ) );
    intVal++;
    MessageBox.Show ( ( *( ( int* ) ( intList[0].ToPointer ( ) ) ) ).ToString ( ) );
  }

暫無
暫無

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

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