我有一个简单的问题(这是在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);
有没有办法让方法直接编辑计数数组而不是仅复制它并编辑副本?由于多线程的原因,我不能拥有全局变量,因为我有类似的方法必须返回非常具体的东西,所以我无法返回最终结果。这可能吗?谢谢!
答案 0 :(得分:6)
有没有办法让方法直接编辑计数数组,而不是只复制它并编辑副本?
是。做你正在做的事。您的程序已经完全符合您的要求。
数组在C#中通过引用传递。 count
和arrayVar
引用相同的数组。将数组传递给方法时,该方法不会获得该数组的副本。它会将引用的副本复制到数组中。
您对arrayVar
内的Invert
所做的更改也将发送到调用方内的count
,因为这两个变量都包含引用阵列。
不要将此与C#的ref
功能混淆。 Ref使两个变量看起来好像是相同的变量。这里有两个不同的变量,它们都引用相同的数组。确保在你的脑海中清楚地区分。
许多答案令人困惑地建议您使用列表而不是数组。列表也是参考类型;传递给方法时,它们与数组具有相同的语义。也就是说,传入的值是参考。使用列表而不是数组的原因是因为列表比数组更灵活,更强大。阵列大小固定;一个包含十个元素的数组总是有十个元素。列表可以添加新元素或删除旧元素。