始终保存当前变量值的列表。C#

始终保存当前变量值的列表。C#,c#,list,mutable,C#,List,Mutable,因此,我需要一个列表(或类似的数据结构),该列表在添加给定变量后始终保存该变量的当前值。这就是当前发生的情况(在更简单/伪代码中): 打印“5” 当我想打印intValue的新值“6”时,仍然打印“5” 基本上,列表需要存储对intValue的引用(我认为这是正确的术语),而不是它的实际值。谢谢您的时间。更改列表类型是不可能的。您可能必须创建自己的引用类型,其行为类似于int。在.net中,结构不是引用类型,因此不可能使用它们获得您需要的行为 您必须意识到添加到列表中的int只是复制,因此对源代

因此,我需要一个列表(或类似的数据结构),该列表在添加给定变量后始终保存该变量的当前值。这就是当前发生的情况(在更简单/伪代码中):

打印“5”

当我想打印intValue的新值“6”时,仍然打印“5”


基本上,列表需要存储对intValue的引用(我认为这是正确的术语),而不是它的实际值。谢谢您的时间。

更改列表类型是不可能的。您可能必须创建自己的引用类型,其行为类似于
int
。在
.net
中,结构不是引用类型,因此不可能使用它们获得您需要的行为

您必须意识到添加到列表中的
int
只是复制,因此对源代码所做的任何更改都不会影响复制。

这是因为在C#中,
int
类型,而不是引用类型。当你写作时

intValue = 5;
intList.Add(intValue);

您向
intValue
添加了一个副本,而不是对变量本身的引用。您要做的是将变量
intValue
的引用添加到
intList
。您可以做的是将您的
int
值包装在您自己的类中(这是一种引用类型)。

您的问题与以下问题非常相似:

将接受答案中的
SortOfMutableString
实现更改为存储
int
值,而不是
string
,您将获得所需的效果


还有,看看Jon Skeet的答案。这对于充分理解此类解决方案的后果非常重要。

因为需要存储引用而不是变量的值,所以可以存储指针。您需要使用
unsafe
关键字来使用C#中的指针

不安全
{
intVal=5;
List intList=新列表();
添加(新的IntPtr(&intVal));
Show((*((int*)(intList[0].ToPointer())).ToString());
intVal++;
Show((*((int*)(intList[0].ToPointer())).ToString());
}

我认为这个答案比另一个答案更清楚,但我认为你关于使用
ref
的评论有误导性,因为这只适用于方法参数。@Steve好的,我对C有点陌生,所以我误解了这个概念。我应该把它从我的答案中删除吗?我想是的。以前的一切
,或者在某种程度上使用ref
都是完美的。没问题!谢谢你的回复!一切都回来了。:)谢谢,这正是我需要的。
intValue++;
Print intList[0].toString();
intValue = 5;
intList.Add(intValue);
  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 ( ) );
  }