如何在不影响变量的情况下将变量传递给函数
How to pass a variable to a function without affecting it
我有这样的东西:
static void Main()
{
int[] sqa = new int[2];
sqa[0] = 1;
sqa[1] = 2;
func(sqa);
}
static void func(int[] sqa)
{
sqa[0] = 0;
sqa[1] = 1;
}
在我调用 func()
之后,`Main() 函数中的值也发生了变化。
我怎样才能防止这样做并在不更改变量的情况下使用变量?
C#中的数组是引用类型,所以总是通过引用传递。
您需要在 func
方法中创建输入数组的副本:
static void func(int[] input)
{
int[] sqa = (int[])input.Clone();
sqa[0] = 0;
sqa[1] = 1;
}
发生这种情况是因为数组是引用类型。您可以通过创建一个新数组并将值从旧数组复制到新数组来绕过此问题。
static void Main()
{
int[] sqa = new int[2];
sqa[0] = 1;
sqa[1] = 2;
int[] sqa2 = new int[2];
Array.Copy(sqa, sqa2, sqa.Length);
func(sqa2);
}
static void func(int[] sqa)
{
sqa[0] = 0;
sqa[1] = 1;
}
我有这样的东西:
static void Main()
{
int[] sqa = new int[2];
sqa[0] = 1;
sqa[1] = 2;
func(sqa);
}
static void func(int[] sqa)
{
sqa[0] = 0;
sqa[1] = 1;
}
在我调用 func()
之后,`Main() 函数中的值也发生了变化。
我怎样才能防止这样做并在不更改变量的情况下使用变量?
C#中的数组是引用类型,所以总是通过引用传递。
您需要在 func
方法中创建输入数组的副本:
static void func(int[] input)
{
int[] sqa = (int[])input.Clone();
sqa[0] = 0;
sqa[1] = 1;
}
发生这种情况是因为数组是引用类型。您可以通过创建一个新数组并将值从旧数组复制到新数组来绕过此问题。
static void Main()
{
int[] sqa = new int[2];
sqa[0] = 1;
sqa[1] = 2;
int[] sqa2 = new int[2];
Array.Copy(sqa, sqa2, sqa.Length);
func(sqa2);
}
static void func(int[] sqa)
{
sqa[0] = 0;
sqa[1] = 1;
}