【发布时间】:2018-11-28 23:36:17
【问题描述】:
这是我在网站上的第一个问题,我相信我会在这里找到答案。
在学校,我尝试编写一些基本的 C# 编码来应对我们面临的挑战。
问题来了:
通常,当我通过一个方法传递一个值时,我不会遇到问题。像这样:
static void Main(string[] args)
{
// Declare Integer
int originalInt = 20;
// Call the Method
int multipliedInt = Multiplication(originalInt);
// Prompt
Console.WriteLine("Original: {0} Modified: {1}", originalInt, multipliedInt);
}
// Method
static public int Multiplication(int original)
{
// Quik Maffs
int modifiedValue = original * 2;
return modifiedValue;
}
上面的例子工作得很好。原值为20,修改后值为40。
但是,当我尝试对数组执行此操作时,情况会发生变化:
static void Main(string[] args)
{
// Declare Original Array
int[] originalArray = new int[] {1, 4, 6, 8, 12};
// Call Method
int[] multipliedArray = Multiplication(originalArray);
// Prompt
Console.WriteLine("Original: [{0}], Multiplied: [{1}]", String.Join(", ", originalArray), String.Join(", ", multipliedArray));
}
// Method
static public int[] Multiplication(int[] original)
{
// New Int
int[] modified = original;
// Loop
for (int i = 0; i < modified.Length; i++)
{
modified[i] *= 2;
}
return modified;
}
上面的代码两次返回修改后的值。它似乎也修改了原始值。
知道为什么会这样吗?
【问题讨论】:
-
数组是通过引用传递的,因此您传递的是对原始数组的引用,而不是您期望的值的副本。
-
不同之处在于,在第一个示例中,您通过值传递变量。在第二个示例中,您将传递对数组的引用。当您使用 int 参数时,该方法会接收该值的副本。使用数组,您传递的是对数组的引用,而不是它的副本。
-
@JonathonChase 啊,我不知道这个。所以我假设我必须在方法中创建一个新的 int 数组。
-
@emsimpson92 这仍然需要修改原始数组。我认为 OP 想要一个具有原始值的数组副本和一个具有新值的副本。
-
没有必要道歉。阅读副本,希望它对您有价值。
标签: c# arrays methods arguments