浅谈c#的三个高级参数ref out 和Params

时间:2022-06-10 03:06:23

前言:在我们学习c#根本的时候,我们会学习到c#的三个高级的参数,分袂是out .ref 和Params,在这里我们来分另外讲解一下,在这里的我们先不做具体的解释,我会通过几个例子来做分另外解释。

一:out参数

 1.首先我先给大家一个题:我们来写一个要领,来求一个数组中的最大值,最小值,总和,平均值。代码如下:

 int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 

通过分析我们会发明如果我们写一个要领的时候,当我们需要返回值的时候,我们只能返回一个值,这个时候我们需要求最大值,最小值,总和和平均值。我们该如何的写呢??假如我们没有学习过out参数,这时候我们可以考虑返回一个数组,并且分另外假定数组中的元素的最大值,最小值,总和。(当总和求出来之后,平均值也就出来了)。详细的代如下:

//我们声明一个长度为4的数组,假设 res[0] 最大值 res[1]最小值 res[2]总和 res[3]平均值 int[] res = new int[4]; //假定数组中的第一个元素为最大值 res[0] = nums[0];//max //假定数组中的第二个元素为最小值 res[1] = nums[0];//min //假定数组中的第三个元素为总和 res[2] = 0;//sum

注:num[0]:这只是我们假定的值。

2.这时候我们需要遍历for循环,如果当前循环到的元素比我的最大值还要大,就把当前的元素赋值给我的最大值,,如果当前循环到的元素比我的最小值还要小,就把当前的元素赋值给我的最小值,总和就是所有的元素相加,平均值为总和/数组的长度。详细的代码如下:

for (int i = 0; i < nums.Length; i++) { //如果当前循环到的元素比我假定的最大值还大 if (nums[i] > res[0]) { //将当前循环到的元素赋值给我的最大值 res[0] = nums[i]; } //如果当前循环到的元素比我的最小值还要小 if (nums[i] < res[1]) { //就把当前的元素赋值给我的最小值 res[1] = nums[i]; } //总和 res[2] += nums[i]; }

3.这时候直接返回数组就行了,完整的代码如下:

1 /// <summary> 2 /// 计算一个数组的最大值、最小值、总和、平均值 3 /// </summary> 4 /// <param></param> 5 /// <returns></returns> 6 public static int[] GetMaxMinSumAvg(int[] nums) 7 { 8 //我们声明一个长度为4的数组,假设 res[0] 最大值 res[1]最小值 res[2]总和 res[3]平均值 9 int[] res = new int[4]; 10 //假定数组中的第一个元素为最大值 11 res[0] = nums[0];//max 12 //假定数组中的第二个元素为最小值 13 res[1] = nums[0];//min 14 //假定数组中的第三个元素为总和 15 res[2] = 0;//sum 16 for (int i = 0; i < nums.Length; i++) 17 { 18 //如果当前循环到的元素比我假定的最大值还大 19 if (nums[i] > res[0]) 20 { 21 //将当前循环到的元素赋值给我的最大值 22 res[0] = nums[i]; 23 } 24 //如果当前循环到的元素比我的最小值还要小 25 if (nums[i] < res[1]) 26 { 27 //就把当前的元素赋值给我的最小值 28 res[1] = nums[i]; 29 } 30 //总和 31 res[2] += nums[i]; 32 } 33 //平均值 34 res[3] = res[2] / nums.Length; 35 return res; 36 }

4.接下来就是在Main要领的中挪用,截图如下:

浅谈c#的三个高级参数ref out 和Params

5.这时候我们需要考虑一个问题,我想要在数组中返回bool类型的值或者返回string类型的值,这时候我们怎么办呢??这时候需要我们的out参数登场了,out参数就偏重于在一个要领中返回多个差别类型的值,但是它有一个重要的特点是:必需在要领的内部为其赋值。

(1).在我们需要返回的值的前面加out关键字。

(2).当我们在Main要领中挪用我们的要领的时候,首先需要先声明变量。

解题的思路跟上面的一样这里就不做过多的解释了,直接完整的代码送上: