Как присвоить результат делегата переменной в методе?

Формулировка вопроса возможно размытая, поэтому вот моя цель:

public static void Main(string[] args)
{
    Func<int, int> func = new Func<int, int>(x => x++);
    Func<int, int> func2 = new Func<int, int>(x => x * x);
    int res = Method(func, func2, 5);
    // по задумке Method просто должен применить делегат сначала func к числу 5, а потом func2 к результату
    // но это просто не работает, так переменная number, по какой-то причине, остается равна 5
}

static int Method(Func<int, int> func, Func<int, int> func2, ref int number)
{
     func(number); 
     func2(number);
     return number;
}

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

Автор решения: Exploding Kitten

Приведенный код вообще не будет компилироваться, вам в данном случае ref не нужно, должно быть так:

static int Method(Func<int, int> func, Func<int, int> func2, int number)
{
     return func2(func(number));
}

Тогда в переменной res будет лежать нужный результат.

А ваш код не работает, т.к. после применения вычислений делегата вы их просто игнорируете и никуда не сохраняете и не передаете дальше. Т.е. Func<int, int> func означает, что у нас есть делегат который принимает один аргумент типа int и возвращает int, но вы пишете просто func(number) без никакого присваивания, поэтому и возвращается оригинальное значение.

→ Ссылка