C#学习笔记 -- 数组: 数组浅克隆、ref返回与ref局部变量
1、Clone()
-
它只创建了数组本身的克隆.
-
如果是引用类型数组, 他不会赋值元素引用的对象
-
对于值类型和引用类型数组来说, 具有不同的结果
-
克隆值类型数组会产生两个独立数组
-
克隆引用类型数组会产生指向相同对象的两个数组
-
-
克隆方法返回object类型的引用, 它必须被强制转换成数组类型
int[] intArr1 = {1, 2, 3};
int[] intArr2 = (int[]) intArr1.Clone();
例子1 克隆值类型
static void Main(string[] args)
{
int[] intArr1 = { 1, 2, 3 };
int[] intArr2 = (int[])intArr1.Clone();
for (int i = 0; i < intArr2.GetLength(0); i++)
{
intArr2[i] = i * 100;
}
}
例子2 克隆引用类型
static void Main(string[] args)
{
A[] Aarry1 = new A[3] { new A(), new A() , new A() };
A[] Aarry2 = (A[]) Aarry1.Clone();
for (int i = 0; i < Aarry2.GetLength(0); i++)
{
Aarry2[i].Value = (i+1) * 100;
}
Printer.PrintArrays13Clone(Aarry1); //100 200 300
Printer.PrintArrays13Clone(Aarry2); //100 200 300
}
2、ref返回和ref局部变量
-
ref返回可以把一个引用作为返回值传到方法体外
-
ref局部变量可以在调用域中使用该引用
使用ref返回和ref局部变量, 可以将某个数组中的某个元素的引用获取并使用, 而不是该元素的值
public static ref int PointerToHighestPositive(int[] nums)
{
int highestIndex = 0;
int highestValue = nums[0];
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > highestValue)
{
highestValue = nums[i];
highestIndex = i;
}
}
return ref nums[highestIndex];
}
static void Main(string[] args)
{
int[] nums = new int[] { 5, 80 };
Console.WriteLine("before"); //5 80
foreach (var num in nums)
{
Console.Write($"{num} ");
}
Console.WriteLine("\nafter"); //5 0
ref int heightElement = ref Program1314.PointerToHighestPositive(nums);
heightElement = 0; //修改最高值
foreach (var num in nums)
{
Console.Write($"{num} ");
}
}
//5 80
//5 0