Назад Вперед Зміст

Методи з кількома параметрами та кількома значеннями, що повертаються у C#

У C# методи можуть мати декілька вхідних параметрів, а також повертати більше ніж одне значення. Це досягається кількома способами: використанням out/ref параметрів, поверненням кортежів (Tuple або ValueTuple), а також поверненням спеціально створених класів або структур.


1. Кілька вхідних параметрів

Звичайні методи в C# можуть приймати довільну кількість аргументів з різними типами.


static int Sum(int a, int b, int c)
{
    return a + b + c;
}

static void Main()
{
    int result = Sum(2, 4, 6);
    Console.WriteLine($"Сума: {result}");
}

2. Повернення кількох значень через out

Ключове слово out дозволяє передати змінну в метод, який змінить її значення та поверне через параметри.


static void Divide(int dividend, int divisor, out int quotient, out int remainder)
{
    quotient = dividend / divisor;
    remainder = dividend % divisor;
}

static void Main()
{
    Divide(17, 5, out int q, out int r);
    Console.WriteLine($"Частка: {q}, Остача: {r}");
}

3. Повернення кількох значень через ref

ref дозволяє передати змінну в метод та змінити її значення. На відміну від out, змінна має бути ініціалізована до виклику.


static void Increment(ref int x, ref int y)
{
    x++;
    y++;
}

static void Main()
{
    int a = 3, b = 7;
    Increment(ref a, ref b);
    Console.WriteLine($"a = {a}, b = {b}");
}

4. Повернення кількох значень через кортежі

З C# 7.0 з’явилися ValueTuple, які дозволяють методам повертати кілька значень у зручному форматі.


static (int Sum, double Average) CalculateStats(int[] numbers)
{
    int sum = numbers.Sum();
    double avg = numbers.Average();
    return (sum, avg);
}

static void Main()
{
    var (total, avg) = CalculateStats(new int[] { 2, 4, 6, 8 });
    Console.WriteLine($"Сума: {total}, Середнє: {avg}");
}

5. Повернення спеціального класу або структури

Іноді зручно створити власний тип для групи значень, які метод повинен повертати.


class Point
{
    public double X { get; set; }
    public double Y { get; set; }
}

static Point GetCoordinates()
{
    return new Point { X = 5.5, Y = 7.2 };
}

static void Main()
{
    Point p = GetCoordinates();
    Console.WriteLine($"X = {p.X}, Y = {p.Y}");
}

Висновок

Назад Вперед Зміст