Почему вы не можете вызвать fuction напрямую с параметрами с Fun c? - PullRequest
0 голосов
/ 12 апреля 2020

У меня просто вопрос о делегате Func и Action.

Мне просто интересно, почему вы не можете сделать это напрямую:

public static int addTowNumber(int a, int b)
{
    return a + b;
}

Func<int, int, int> add = addTowNumber(1,2);

Но вы должны сделать это:

Func<int, int, int> add = addTowNumber;

var addNumber = add(1, 2);
Console.WriteLine(addNumber);

1 Ответ

4 голосов
/ 12 апреля 2020

Передав аргументы, вы фактически вызываете метод и возвращаете int.

Чтобы сохранить ссылку на функцию, которая будет вызвана позже, вы не передаете аргументы, что почему это правильно:

Func<int, int, int> add = addTowNumber;

Затем вы можете указать любые аргументы, которые вам нравятся при вызове:

int result1 = add(1, 2);
int result2 = add(3, 4);

Если вы хотите отложить выполнение метода с предопределенными аргументами, вот что кажется, что вы пытаетесь сделать, вам нужно создать замыкание, как это:

Func<int> add = () => addTowNumber(1, 2);
int result = add();
...