除了按引用传递值外,还可以使用out关键字,指定所给的参数是一个输出参数。out关键字的使用方式与ref关键字相同(在函数定义和函数调用中用作参数的修饰符)。实际上,它的执行方式与引用参数几乎完全一样,因为在函数执行完毕后,该参数的值将返回给函数调用中使用的变量.但是,二者存在一些重要区别:
•把未赋值的变量用作ref参数是非法的,但可以把未赋值的变量用作out参数。
•另外,在函数使用out参数时,必须把它看成尚未赋值。
即调用代码可以把已赋值的变量用作out参数,但存储在该变量中的值会在函数执行时丢失。
例如,考虑前面返回数组中最大值的MaxValue()函数,略微修改该函数,获取数组中最大值的元素索引。为简单起见,如果数组中有多个元素的值都是这个最大值,只提取第一个最大值的索引。为此,修改函数,添加一个out参数,如下所示:
static int MaxValue(int[] intArray, out int maxlndex)
{
int maxVal = intArray[0];
maxlndex = 0;
for (int i = 1; i < intArray.Length; i++)
{
if (intArray[i] > maxVal)
{
maxVal = intArray[i];
maxlndex = i;
}
}
return maxVal;
}
可采用以下方式使用该函数:
int [] myArray = { 1, 8, 3, 6, 2, 5, 9, 3, 0, 2 };
WriteLine("The maximum value in myArray is " + $"{MaxValue(myArray, out int maxlndex)}");
WriteLine("The first occurrence of this value is " + $" at element {maxlndex + 1}");
结果如下:
The maximum value in myArray is 9
The first occurrence of this value is at element 7
注意,必须在函数调用中使用out关键字,就像ref关键字一样。当解析数据时out关键字也非常有用,如下所示:
if (!int.TryParse(input, out int result))
{
return null;
}
return result;
这段代码检查input变量中存储的值是不是整型值。如果不是,则返回null值;如果是,则通过声明为result的out变量向调用函数返回整型值。
已有 22658 名学员学习以下课程通过考试
最需教育客户端 软件问题一手掌握
去 App Store 免费下载 iOS 客户端
点击加载更多评论>>