Параметры выхода
В дополнение к передаче значений по ссылке вы также можете указать, что данный параметр является параметром out, используя ключевое слово out, которое используется аналогичным образом.как ключевое слово ref (как модификатор параметра в определении функции и в вызове функции).По сути, это дает вам почти такое же поведение, как и у ссылочного параметра, в котором значение параметра в конце выполнения функции возвращается в переменную, используемую в вызове функции.Однако существуют важные различия:
- В то время как использование неназначенной переменной в качестве параметра ref недопустимо, вы можете использовать неназначенную переменную в качестве параметра out
- Параметр out долженобрабатывается как функция, которая ее использует, как неназначенное значение.
Это означает, что, хотя при вызове кода допустимо использовать назначенную переменную в качестве параметра out, значение, сохраненное в этой переменной, теряетсякогда функция выполняется.
В качестве примера рассмотрим расширение функции MaxValue (), показанной ранее, которая возвращает максимальное значение массива.Немного измените функцию, чтобы получить индекс элемента с максимальным значением в массиве.Для простоты получите только индекс первого вхождения этого значения, когда имеется несколько элементов с максимальным значением.Для этого добавьте параметр out, изменив функцию следующим образом:
static int MaxValue(int[] intArray, out int maxIndex)
{int maxVal = intArray [0];maxIndex = 0;for (int i = 1; i maxVal) {maxVal = intArray [i];maxIndex = i;}} return maxVal;}
Вы можете использовать эту функцию, как показано здесь:
int[] myArray = {1, 8, 3, 6, 2, 5, 9, 3, 0, 2};
int maxIndex;Console.WriteLine («Максимальное значение в myArray - {0}», MaxValue (myArray, out maxIndex));Console.WriteLine («Первое вхождение этого значения в элементе {0}», maxIndex + 1);
Это приводит к следующему:
Максимальное значение в myArray9
Первое вхождение этого значения в элементе 7
Один был добавлен к значению maxIndex, возвращаемому здесь, когда оноотображается на экране.Это делается для перевода индекса в более читаемую форму, так что первый элемент в массиве называется элементом 1, а не элементом 0.