通过引用List.Add()传递值

时间:2014-01-08 23:26:40

标签: c# list reference

我如何通过引用传递值List

int x = 2;
List<int> newList = new List<int>();
newList.Add(x);

System.Console.WriteLine(x);
x = 7;
System.Console.WriteLine(newList[0]);
newList[0] = 10;
System.Console.WriteLine(x);

我的目标是列表中与之前相关的元素。在C ++中,我会使用一个指针列表,但是现在我感到绝望。

3 个答案:

答案 0 :(得分:3)

您不能使用值类型。您需要使用引用类型。

(更改)您也无法使用对象执行此操作,您需要定义具有int属性的自定义类。如果您使用对象,它将自动执行装箱和拆箱。实际值永远不会受到影响。

我的意思是这样的:

MyInteger x = new MyInteger(2);
List<MyInteger> newList = new List<MyInteger>();
newList.Add(x);

Console.WriteLine(x.Value);
x.Value = 7;
Console.WriteLine(newList[0].Value);
newList[0].Value = 10;
Console.WriteLine(x.Value);

class MyInteger
{
  public MyInteger(int value)
  {
        Value = value;
  }
  public int Value { get; set; }
}

答案 1 :(得分:1)

整数是基元,所以你不是传递一个指针,而是它自己的值。

指针隐含在C#中,因此您可以在对象中包装整数并传递该对象,而您将传递指向该对象的指针。

答案 2 :(得分:1)

您无法在.NET泛型集合中存储值类型,并通过引用访问它们。你能做的就是西蒙怀特黑德的建议。

我看到这个问题的解决方案很少:

1)创建一个将保存整数的类(可能还有其他可能需要的值)

2)写下“不安全”的代码。如果为项目启用此选项,.NET允许使用指针。这甚至可能需要创建自定义集合类。

3)将算法重组为不需要引用。例如。保存您想要更改的值的索引。