在c#中传递匿名方法/函数作为参数

本文关键字:函数 参数 方法 | 更新日期: 2023-09-27 17:53:47

我有一个方法,需要有条件地执行一个方法,像这样:

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));

我该怎么做?

在c#中传递匿名方法/函数作为参数

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

可以看到,我已经将查询变成了一个lambda。您必须这样做,否则,您的查询将在调用MyMethod(…)之前执行。并且会引入编译时错误;)),而不是在执行时。

边注:

这个return someFunction;应该是return someFunction();

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

        return someFunction();

调用时,直接调用函数。相反,您需要传递一个lambda表达式。此外,你似乎是在一个Func<IEnumerable<int>>;add Single(), SingleOrDefault(), First()FirstOrDefault():

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