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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律