C# позволяет использовать в качестве параметра метода любой тип данных, в том числе и массивы.
Массив в качестве параметра
При использовании массива в качестве параметра метода, синтаксис не отличается от других типов данных, которые мы ранее использовали.
Рассмотрим пример программы для поиска максимального значения в массиве:
using System;
class Program
{
static int ArrayMax(int[] array)
{
var maxValue = int.MinValue;
foreach (var element in array)
{
if (maxValue < element)
{
maxValue = element;
}
}
return maxValue;
}
static void Main(string[] args)
{
var a = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"Максимальное значение массива {ArrayMax(a)}");
Console.ReadLine();
}
}
Массивы являются ссылочным типом данных и передаются по ссылке, это значит, что любые изменения переданного в качестве аргумента массива внутри метода, отражаются на массиве в основной программе.
К примеру, нам нужен метод, который заменить все отрицательные значения на их значение по модулю. Код будет иметь вид:
using System;
class Program
{
static void ChangeToAbs(int[] arr)
{
for (var i = 0; i < arr.Length; i++)
{
if (arr[i] < 0)
{
arr[i] *= -1; //изменение знака числа, можно заменить на Math.Abs
}
}
}
static void Main(string[] args)
{
var a = new[] { -2, 5, 7, 3, -9, -6, 0, -1 };
ChangeToAbs(a);
Console.WriteLine(string.Join(", ", a));
Console.ReadLine();
}
}
Использование массивов в качестве параметров, не налагает никаких ограничений, их можно использовать совместно с другими типами данных, в любой последовательности. Код метода для умножения каждого элемента целочисленного массива на целое число:
static void Mult(int[] numbers, int k)
{
for (var i = 0; i < numbers.Length; i++)
{
numbers[i] *= k;
}
}
Переменное число аргументов
Ключевое слово params позволяет отметить параметр метода, который принимает переменное количество аргументов.
При использовании модификатора params на метод налагаются следующие ограничения:
- Параметр, отмеченный ключевым словом params, должен быть одномерным массивом;
- После ключевого слова params нельзя использовать другие параметры, иными словами он должен быть в конце списка параметров;
- Допускается использование только одного параметра помеченного как params;
- Аргументы должны иметь тот же тип, что указан при объявлении параметра;
- Список аргументов разделяется запятой;
- Если аргументы не передаются, то список params пустой – Length == 0.
Метод с переменным количеством аргументов может принимать на вход массив того же типа.
Пример использования переменного количества параметров в методе для поиска минимального значения из списка:
using System;
class Program
{
static float Minimal(params float[] values)
{
var min = float.MaxValue;
for (var i = 0; i < values.Length; i++)
{
if (min > values[i])
{
min = values[i];
}
}
return min;
}
static void Main(string[] args)
{
Console.WriteLine(Minimal()); //3.4E38
Console.WriteLine(Minimal(2, 5)); //2
Console.WriteLine(Minimal(6, 5, 4, 3, 1));//1
Console.WriteLine(Minimal(new[] { 5f, 9f })); //5
Console.ReadLine();
}
}