Передача элементов массива в функцию как отдельных аргументов. C#

Как передать элементы массива в функцию в качестве отдельных аргументов?

Можно сделать так:

f(arr[0], arr[1], arr[2])

Но это не всегда удобно.

На Python можно было делать так:

f(*arr)

как делать на C# почему-то не могу найти.


Ответы (1 шт):

Автор решения: aepot

Мне же нужно наоборот массив передать как несколько аргументов. Например передать массив из 2х элементов в Random.Next()

Как в питоне конечго же не получится, но способ можно написать самому

private readonly Random rnd = Random.Shared;

public int RandomRange(int[] array, int offset = 0)
{
    return rnd.Next(array[offset], array[offset + 1]);
}
int[] array = new[] { 0, 10, 20, 45 };
int number = RandomRange(array, 1); // [10..20)

Или так

public int RandomRange(int[] array)
{
    return rnd.Next(array[0], array[1]);
}
int number = RandomRange(array[1..2]); // [10..20)

Первый способ оптимальнее, второй спавнит новый массив из 2 элементов, поэтому если надо очень много генерировать, то лучше первый.

Есть вариант еще со спанами, выглядит как второй, работает как первый, но я его для сохранения простоты ответа оставлю за рамками. Про вариант с небезопасным кодом вообще промолчу, он кстати похож на питоновский был бы.

→ Ссылка