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();
}
}