gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:08 25 4
gpt4 key购买 nike

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

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

最佳答案

Is there a way to have the method directly edit the count array instead of just duplicating it and editing the duplicate?

是的。做你正在做的事。你的程序已经完全按照你的要求做了。

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

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

不要将它与 C# 的 ref 特性混淆。 Ref 使两个变量表现得好像它们是相同的变量。这里有两个不同的变量,它们都引用同一个数组。确保您的脑海中清楚区分。

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

关于c# - 有一个方法直接编辑作为参数传递的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35611523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com