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