有一个方法直接编辑作为参数传递的变量吗?

时间:2016-02-24 19:42:50

标签: c# arrays multithreading methods parameters

我有一个简单的问题(这是在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);    

有没有办法让方法直接编辑计数数组而不是仅复制它并编辑副本?由于多线程的原因,我不能拥有全局变量,因为我有类似的方法必须返回非常具体的东西,所以我无法返回最终结果。这可能吗?谢谢!

1 个答案:

答案 0 :(得分:6)

  

有没有办法让方法直接编辑计数数组,而不是只复制它并编辑副本?

是。做你正在做的事。您的程序已经完全符合您的要求。

数组在C#中通过引用传递countarrayVar引用相同的数组。将数组传递给方法时,该方法不会获得该数组的副本。它会将引用的副本复制到数组中。

您对arrayVar内的Invert所做的更改也将发送到调用方内的count,因为这两个变量都包含引用阵列。

不要将此与C#的ref功能混淆。 Ref使两个变量看起来好像是相同的变量。这里有两个不同的变量,它们都引用相同的数组。确保在你的脑海中清楚地区分。

许多答案令人困惑地建议您使用列表而不是数组。列表也是参考类型;传递给方法时,它们与数组具有相同的语义。也就是说,传入的值是参考。使用列表而不是数组的原因是因为列表比数组更灵活,更强大。阵列大小固定;一个包含十个元素的数组总是有十个元素。列表可以添加新元素或删除旧元素。