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

138
18 апреля 2022, 01:00

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

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;
}
Answer 1

Приведенный код вообще не будет компилироваться, вам в данном случае 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) без никакого присваивания, поэтому и возвращается оригинальное значение.

READ ALSO
Docker и asp.net core 3.1 + angular application

Docker и asp.net core 3.1 + angular application

Пытаюсь впервые развернуть приложение в докереПри создании приложения выбрал шаблон Angular application

186
Не могу найти ошибку в реализации SHA1 на C#

Не могу найти ошибку в реализации SHA1 на C#

Хэш не совпадаетОшибка скорее всего в основном цикле, потому что массив numarr определяется верно

207
Плавное изменение размера объекта unity

Плавное изменение размера объекта unity

помогите сделать плавное увеличение и уменьшение размеров кнопки программноЯ написал код, но он почему-то изменяется слишком быстро

150
Quartz.NET не работает вместе с Entity framework

Quartz.NET не работает вместе с Entity framework

Если в классе OrderTime создам конструктор c базой, то метод Execute перестает работатьКто знает как решить эту проблему? Может можно реализовать...

149