Func<T1, T2, TResult> jako parametr funkcji

0

Cześć. Zrobiłem sobie klasę, która przechowuje tablicę intów. I chciałbym stworzyć metodę, która przyjmuje jako argument Func<int, int ,int> i w zależności od tego jakie działanie podamy w wywołaniu, wykonuje to działanie na wszystkich elementach tablicy. Coś w rodzaju:

TablicaObliczeniowa tablica = new TablicaObliczeniowa(new int[] { 1, 2, 3, 4, 5 });
Console.WriteLine("Suma = " + tablica.Oblicz((x, y) => x + y));    // wypisze: Suma = 15
Console.WriteLine("Różnica = " + tablica.Oblicz((x, y) => x - y)); // wypisze: Różnica = -14

Widziałem, że chyba jest to możliwe, ale nie wiem jak się za to zabrać. Będę wdzięczny za pomoc.

2

To co tu robisz to jest to samo co Aggregate z LINQ, albo użyj go wprost albo w klasie TablicaObliczeniowa.

3

Przykład mechanizmu, ale nie akurat tak jak chciałeś

public static decimal Oblicz(Func<decimal, decimal, decimal> func, params int[] args)
{
    if (args.Length == 0)
        throw new ArgumentException("blabla");

    decimal result = args[0];

    foreach (var arg in args.Skip(1))
        result = func(result, arg);

    return result;
}

static void Main()
{
    var data = new[] { 1,2,3,4,5 };
    Func<decimal, decimal, decimal> func1 = (decimal a, decimal b) => a + b;
    Func<decimal, decimal, decimal> func2 = (decimal a, decimal b) => a - b;

    Console.WriteLine($"Wynik1: {Oblicz(func1, data)}");
    Console.WriteLine($"Wynik2: {Oblicz(func2, data)}");
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1