因为今天在写Java程序的时候数组复制出现了问题,所以也就查了查C#中数组的复制。
同样的C#中数组的复制也是进行的引用的传递,而不是值传递。
首先看一个实例:
namespace ArrayDemo
{
class Program
{
static void Main(string[] args)
{
int[] array1 = { 1, 2, 3, 4, 5 };
int[] array2 = array1;
int[] array3 = new int[array1.Length];
array1.CopyTo(array3, 0);
int[] array4 = new int[array1.Length];
Array.Copy(array1, array4, array1.Length);
int[] array5 = (int[]) array1.Clone();
for (int i = 0; i < array1.Length; i++)
{
array1[i] += 1;
}
for (int i = 0; i < array2.Length; i++)
{
Console.Write(array2[i]);
Console.Write(" ");
}
Console.WriteLine();
for (int i = 0; i < array3.Length; i++)
{
Console.Write(array3[i]);
Console.Write(" ");
}
Console.WriteLine();
for (int i = 0; i < array4.Length; i++)
{
Console.Write(array4[i]);
Console.Write(" ");
}
Console.WriteLine();
for (int i = 0; i < array5.Length; i++)
{
Console.Write(array5[i]);
Console.Write(" ");
}
}
}
}
运行结果如下:
可以看到,数组array2是引用传递,其值会随着array1的变化而变化,其他的数组都进行的是拷贝操作,其值不会随着array1的变化而变化。
下面说说,C#中数组复制的方法,其实上面的实例中已经有所体现。
1.利用for循环进行遍历(这个很简单,不用多说)
2.利用数组的CopyTo方法
int[] array3 = new int[array1.Length];
array1.CopyTo(array3, 0);
3.利用Array类的Copy方法
int[] array4 = new int[array1.Length];
Array.Copy(array1, array4, array1.Length);
4.利用数组的Clone方法(需要进行类型的强转)
int[] array5 = (int[]) array1.Clone();
具体参数含义参考MSDN文档
二维数组的也和Java中一样,这里不再多说。