繁体   English   中英

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

[英]Passing in an anonymous method/function as a parameter in C#

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

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

我该怎么做呢?

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

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

旁注:

return someFunction; 应该return someFunction(); .

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

        return someFunction();

调用它时,您直接调用 function。 相反,您需要传递 lambda 表达式。 此外,您似乎正在传递Func<IEnumerable<int>> 添加Single()SingleOrDefault()First()FirstOrDefault()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM