Параметры массивы

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

Смотрите также: