繁体   English   中英

方法是否直接编辑作为参数传递的变量?

[英]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#中通过引用传递。 countarrayVar引用相同的数组 当您将数组传递给方法时,该方法不会获得该数组的副本。 它获取对数组的引用的副本。

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

不要将此与C#的ref功能混淆。 Ref使两个变量充当相同的变量 在这里,您有两个不同的变量,都引用同一数组 确保区分清楚。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM