C# 輸出參數(shù)
除了按引用傳遞值外,還可以使用out關(guān)鍵字,指定所給的參數(shù)是一個(gè)輸出參數(shù)。out關(guān)鍵字的使用方式與ref關(guān)鍵字相同(在函數(shù)定義和函數(shù)調(diào)用中用作參數(shù)的修飾符)。實(shí)際上,它的執(zhí)行方式與引用參數(shù)幾乎完全一樣,因?yàn)樵诤瘮?shù)執(zhí)行完畢后,該參數(shù)的值將返回給函數(shù)調(diào)用中使用的變量.但是,二者存在一些重要區(qū)別:
?把未賦值的變量用作ref參數(shù)是非法的,但可以把未賦值的變量用作out參數(shù)。
?另外,在函數(shù)使用out參數(shù)時(shí),必須把它看成尚未賦值。
即調(diào)用代碼可以把已賦值的變量用作out參數(shù),但存儲(chǔ)在該變量中的值會(huì)在函數(shù)執(zhí)行時(shí)丟失。
例如,考慮前面返回?cái)?shù)組中最大值的MaxValue()函數(shù),略微修改該函數(shù),獲取數(shù)組中最大值的元素索引。為簡(jiǎn)單起見,如果數(shù)組中有多個(gè)元素的值都是這個(gè)最大值,只提取第一個(gè)最大值的索引。為此,修改函數(shù),添加一個(gè)out參數(shù),如下所示:
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;
}
可采用以下方式使用該函數(shù):
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}");
結(jié)果如下:
The maximum value in myArray is 9
The first occurrence of this value is at element 7
注意,必須在函數(shù)調(diào)用中使用out關(guān)鍵字,就像ref關(guān)鍵字一樣。當(dāng)解析數(shù)據(jù)時(shí)out關(guān)鍵字也非常有用,如下所示:
if (!int.TryParse(input, out int result))
{
return null;
}
return result;
這段代碼檢查input變量中存儲(chǔ)的值是不是整型值。如果不是,則返回null值;如果是,則通過(guò)聲明為result的out變量向調(diào)用函數(shù)返回整型值。
點(diǎn)擊加載更多評(píng)論>>