[英]Have a method directly edit a variable passed as a parameter?
我有一个快速的问题(这在C#中)。 假设我有一个数字数组:
int[] count = new int[4] {0, 4, 3, 2};
我有一个方法,可以做一些事情:
public void Invert(int[] arrayVar)
{
for (int i = 0; i < arrayVar.Count; i++)
{
//arrayVar[i] = stuff
}
}
如果我通过这样做来调用方法:
Invert(count);
有没有办法让该方法直接编辑count数组,而不仅仅是复制它并编辑副本? 由于多线程原因,我无法使用全局变量,也无法返回最终结果,因为我有类似的方法必须返回非常具体的内容。 这可能吗? 谢谢!
有没有办法让该方法直接编辑count数组,而不仅仅是复制它并编辑副本?
是。 完全按照自己的方式做。 您的程序已经完全可以满足您的要求。
数组在C#中通过引用传递。 count
和arrayVar
引用相同的数组 。 当您将数组传递给方法时,该方法不会获得该数组的副本。 它获取对数组的引用的副本。
您在Invert
对arrayVar
所做的更改也将count
调用者内部,因为这两个变量都包含对同一数组的引用 。
不要将此与C#的ref
功能混淆。 Ref使两个变量充当相同的变量 。 在这里,您有两个不同的变量,都引用同一数组 。 确保区分清楚。
许多答案令人困惑,建议您使用列表而不是数组。 列表也是参考类型。 当传递给方法时,它们与数组具有相同的语义。 即,传入的值是参考。 使用列表而不是数组的原因是因为列表比数组更灵活,功能更强大。 数组的大小是固定的; 包含十个元素的数组始终具有十个元素。 列表可以添加新元素或删除旧元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.