在C#中传入匿名方法/函数作为参数

时间:2011-04-30 07:35:34

标签: c# anonymous-function anonymous-methods

我有一个需要有条件地执行方法的方法,如下所示:

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

    return 0;
}

我希望能够将Linq查询作为someFunction传递给MyMethod:

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

我该怎么做?

2 个答案:

答案 0 :(得分:6)

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

如您所见,我已将查询转换为lambda。您将不得不这样做,否则,您的查询将在调用MyMethod之前执行(...并将引入编译时错误;))而不是在执行时执行。

附注:

return someFunction;应为return someFunction();

答案 1 :(得分:2)

也许这是一个错字,但在MyMethod中你需要实际调用函数:

        return someFunction();

调用它时,你直接调用该函数。相反,你需要传递一个lambda表达式。而且,你似乎在传递Func<IEnumerable<int>>;添加Single()SingleOrDefault()First()FirstOrDefault()

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