我如何通过引用传递值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 ++中,我会使用一个指针列表,但是现在我感到绝望。
答案 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)将算法重组为不需要引用。例如。保存您想要更改的值的索引。