如何在不更改原始数组的情况下更改函数中的数组? [复制]

Posted

技术标签:

【中文标题】如何在不更改原始数组的情况下更改函数中的数组? [复制]【英文标题】:How to change an array in a function without changing the original array? [duplicate] 【发布时间】:2021-12-02 10:43:02 【问题描述】:

在 C# 和许多其他语言中,如果将数组传递给函数,它会传递指针/引用,这意味着您可以从函数内部更改数组的值。

来自Microsoft:

数组可以作为参数传递给方法参数。因为数组是引用类型,所以该方法可以改变元素的值。

我有一个特殊情况,我需要通过函数访问和更改数组的内容,但我不想更改原始数组。我认为这会很简单。我可以设置一个等于旧数组的新数组并更改新数组。然而,这也是一样的,因为新数组只是一个指向旧数组的指针。

static void AddToArray(string[] array) 
    var newArray = array;
    newArray[2] = "y";


static void Main(string[] args) 
    string[] array = new string[5];
    array[0] = "h";
    array[1] = "e";

    AddToArray(array);


如果在每一步都打印array的内容:

"he"
"hey" (inside function)
"hey" (after function call)

我在网上做了很多研究,但不知何故还没有找到很多其他需要帮助的人。非常感谢您的建议!

【问题讨论】:

【参考方案1】:

您没有在函数内使用“new”关键字创建数组。更改以下行 -

var newArray = 数组;

var newArray = 新字符串[args.Length];

在将其创建为新数组后,您可以从 args (passed) 数组中复制值

【讨论】:

以上是关于如何在不更改原始数组的情况下更改函数中的数组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不更改原始列表的情况下更改新列表?

如何在不更改原始内容的情况下操作 NSDictionary 内容的副本

如何在不改变原始数组的情况下对数组进行排序?

在不更改索引的情况下重新排序数组

是否可以在不运行 DbVisualizer + SQLite 中的原始 sql 的情况下更改列

Movilizer:在不更改数组键的情况下对数据容器进行排序