我不明白为什么当我更改"copy_of_digits"数组时,"digits"和"parse_result"数组也会发生变化?我检查了一些关于通过引用传递和传递值的在线帮助,并且在那里写了C#传递值是默认值,并且您必须使用"ref"通过引用传递.我认为这里发生的是数组是通过引用传递的,而不是通过值传递的,但我不明白为什么以及如何解决它.任何帮助,将不胜感激!
namespace TestWithArrays
{
class Program
{
public static void Main()
{
Console.WriteLine("Please enter 2 digits:");
string user_input = Console.ReadLine();
int[] parse_result = Parse(user_input);
int[] multiply_by_two_result = MultiplyByTwo(parse_result);
Console.WriteLine("The End...");
Console.ReadLine();
}
public static int[] Parse(string user_input)
{
int[] digits = new int [2];
digits[0] = Int32.Parse(user_input.Substring(0,1));
digits[1] = Int32.Parse(user_input.Substring(1,1));
return digits;
}
public static int[] MultiplyByTwo(int[] digits)
{
int[] copy_of_digits = new int [2];
copy_of_digits = digits;
Console.WriteLine("´digits´ array before copy has been modified: " + string.Join(string.Empty, digits));
copy_of_digits[0] = copy_of_digits[0] * 2;
copy_of_digits[1] = copy_of_digits[1] * 2 ;
Console.WriteLine("´digits´ array after copy has been modified: " + string.Join(string.Empty, digits));
Console.WriteLine("´parse_result´ after copy has been modified: " + string.Join(string.Empty, digits));
return copy_of_digits;
}
}
}
Run Code Online (Sandbox Code Playgroud)
而不是分配参考
copy_of_digits = digits;
Run Code Online (Sandbox Code Playgroud)
将digits数组中的所有值复制到copy-of_digites数组:
Array.Copy(digits, copy_of_digits, 2);
Run Code Online (Sandbox Code Playgroud)
否则,您将有几个引用指向内存中的相同项.