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

use*_*896 1 c# arrays parameters methods multithreading

我有一个简单的问题(这是在C#中).假设我有一系列数字:

int[] count = new int[4] {0, 4, 3, 2};
Run Code Online (Sandbox Code Playgroud)

我有一个做一些东西的方法:

public void Invert(int[] arrayVar)
{
    for (int i = 0; i < arrayVar.Count; i++)
    {
        //arrayVar[i] = stuff
    }
 } 
Run Code Online (Sandbox Code Playgroud)

如果我通过这样做调用方法:

Invert(count);    
Run Code Online (Sandbox Code Playgroud)

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

Eri*_*ert 6

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

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

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

您对arrayVar内部Invert所做的更改也将count在调用者内部进行,因为这两个变量都包含对同一数组的引用.

不要将此与refC#的功能混淆.Ref使两个变量表现得好像它们是同一个变量.这里有两个不同的变量,它们都引用同一个数组.确保在您的脑海中清楚地区分.

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