Передача анонимного метода / функции в качестве параметра в C # - PullRequest
2 голосов
/ 30 апреля 2011

У меня есть метод, который должен условно выполнить метод, что-то вроде этого:

int MyMethod(Func<int> someFunction)
{
    if (_someConditionIsTrue)
    {
        return someFunction;
    }

    return 0;
}

Я хочу иметь возможность передавать запрос Linq в MyMethod как someFunction:

int i = MyMethod(_respository.Where(u => u.Id == 1).Select(u => u.OtherId));

Как мне это сделать?

Ответы [ 2 ]

6 голосов
/ 30 апреля 2011
int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId));

Как видите, я превратил запрос в лямбду.Вам придется сделать это, потому что в противном случае ваш запрос будет выполнен непосредственно перед вызовом MyMethod (... и приведет к ошибкам времени компиляции;)), а не во время его выполнения.

Aпримечание стороны:

Это return someFunction; должно быть return someFunction();.

2 голосов
/ 30 апреля 2011

Возможно, это опечатка, но в MyMethod вам нужно вызвать функцию:

        return someFunction();

И при вызове вы вызываете функцию напрямую. Вместо этого вам нужно передать лямбда-выражение. Кроме того, вы, кажется, передаете Func<IEnumerable<int>>; добавить Single(), SingleOrDefault(), First() или FirstOrDefault():

int i = MyMethod(() => _respository.Where(u => u.Id == 1).Select(u => u.OtherId).SingleOrDefault());
...